angepasster Legendenmarker, erstellt mit Tikzset

angepasster Legendenmarker, erstellt mit Tikzset

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

Bildbeschreibung hier eingeben

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:

Bild

Ich habe mir erlaubt, die Legende unten zu platzieren. Das tut mir leid. Ich persönlich denke, dass Sie Probleme haben, weil \addlegendimagedie 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:

Bildbeschreibung hier eingeben

verwandte Informationen