
Beispiel:
\documentclass{article}
\usepackage{pgfplots}
\usepackage{xcolor}
% Define TikZ styles for interpolation points and values
\newcommand{\interpolationPointStyle}{%
\tikzset{interpolation point/.style={circle, inner sep=1.5pt, fill=black}}
}
\begin{document}
\begin{tikzpicture}
\interpolationPointStyle
\begin{axis}[
xlabel={$x$},
ylabel={$y$},
ymin=0,
xtick=\empty,
axis background/.style={fill=white},
clip=false,
]
% Define array of tick positions
\def\myxticks{3, 4, 5}
% Loop over tick positions and draw interpolation points
\foreach \tick in \myxticks {
\edef\tmp{\noexpand\node[interpolation point] at (axis cs:\tick,0) {};}
\tmp
}
% Curve 1
\addplot[color=red, mark=none, smooth] coordinates {
(3, 0.5)
(4, 0.6)
(5, 0.4)
};
\addlegendentry{Curve 1}
% Interpolation points
\addlegendimage{interpolation point}
\addlegendentry{Interpolation Points}
\end{axis}
\end{tikzpicture}
\end{document}
Produzieren der Ausgabe
Frage:
Ich möchte das Interpolationspunktsymbol, das ich auf der x-Achse eingezeichnet habe, in der Legende haben. Ich dachte, das klappt, wenn man es in ein Legendenbild einfügt, aber es erscheint eine gerade Linie.
Was muss korrigiert werden?
Antwort1
Dies ist meine Änderung an Ihrem Code:
\documentclass{article}
\usepackage{pgfplots}
\usepackage{tikz}
\usepackage{xcolor}
% Define TikZ styles for interpolation points and values
\newcommand{\interpolationPointStyle}{%
\tikzset{interpolation point/.style={circle, inner sep=1.5pt, fill=black}}
}
\begin{document}
\begin{tikzpicture}
\interpolationPointStyle
\begin{axis}[
xlabel={$x$},
ylabel={$y$},
ymin=0,
xtick=\empty,
axis background/.style={fill=white},
clip=false,
legend style={at={(0.5,-0.2)}, anchor=north, legend columns=-1}
]
% Define array of tick positions
\def\myxticks{3, 4, 5}
% Loop over tick positions and draw interpolation points
\foreach \tick in \myxticks {
\edef\tmp{\noexpand\node[interpolation point] at (axis cs:\tick,0) {};}
\tmp
}
% Curve 1
\addplot[color=red, mark=none, smooth] coordinates {
(3, 0.5)
(4, 0.6)
(5, 0.4)
};
\addlegendentry{Curve 1}
% Manually create legend entry for interpolation points
\addlegendimage{only marks, mark=*, mark options={fill=black, scale=0.8}}
\addlegendentry{Interpolation Points}
\end{axis}
\end{tikzpicture}
\end{document}
Das Ergebnis sollte etwa wie folgt aussehen:
Ich habe mir erlaubt, die Legende unten zu platzieren. Das tut mir leid. Ich persönlich denke, dass Sie Probleme haben, weil \addlegendimage
die TikZ-Zeichenbefehle nicht direkt verwendet werden und der TikZ-Stil für Ihre Interpolationspunkte daher nicht erkannt wird.
Das ist aber nur meine Theorie, ich bin mir nicht 100 % sicher.
Antwort2
Ich habe eine Lösung für mein Problem gefunden:
\documentclass{article}
\usepackage{pgfplots}
\usepackage{xcolor}
% Define TikZ styles for interpolation points
\newcommand{\interpolationPointStyle}{%
\tikzset{interpolation point/.style={circle, inner sep=1.5pt, fill=black}}
}
% Define custom legend styles for interpolation points
\pgfplotsset{
interpolation point legend/.style={
legend image code/.code={
\node[interpolation point] at (0.3cm,0cm) {};
}
},
}
\begin{document}
\begin{tikzpicture}
\interpolationPointStyle
\begin{axis}[
xlabel={$x$},
ylabel={$y$},
ymin=0,
xtick=\empty,
axis background/.style={fill=white},
clip=false,
]
% Define array of tick positions
\def\myxticks{3, 4, 5}
% Loop over tick positions and draw interpolation points
\foreach \tick in \myxticks {
\edef\tmp{\noexpand\node[interpolation point] at (axis cs:\tick,0) {};}
\tmp
}
% Curve 1
\addplot[color=red, mark=none, smooth] coordinates {
(3, 0.5)
(4, 0.6)
(5, 0.4)
};
\addlegendentry{Curve 1}
\addlegendimage{interpolation point legend}
\addlegendentry{Interpolation Points}
\end{axis}
\end{tikzpicture}
\end{document}
Ausgabe: