
Tengo un par de curvas que estoy dibujando en un eje, pero una de ellas es un círculo dibujado con una línea "elegante" (simplemente superpongo una curva negra gruesa con una curva discontinua blanca ligeramente más delgada). ¿Hay alguna manera de falsificar una entrada de leyenda para que coincida?
He mirado en el manual de pgfplots y lo veo \addlegendimage
pero \addlegendentry
no puedo pensar en cómo usarlo excepto por una línea simple y rudimentaria:
\documentclass[tikz, border=2mm]{standalone}
\usepackage{pgfplots}
\usepackage{sansmath}
\pgfplotsset{compat=1.17}
% pgfplots package manual at https://ctan.org/pkg/pgfplots?lang=en
\begin{document}
\begin{tikzpicture}
\begin{axis}[
axis equal,
width=10cm, height=6cm,
font=\sffamily,
ticklabel style = {font=\sansmath\sffamily},
xmin=-0.7,xmax=0, xlabel={$x$}, xtick={-1,-0.9,...,0}, minor xtick={-1,-0.95,...,0},
ymin=0.7,ymax=1.0, ylabel={$y$}, ytick={0, 0.1,...,1}, minor ytick={0, 0.05,...,1},
samples=500,domain=-1:0,
grid=both,
legend pos = south east,
legend cell align = left,
title={\large shapes on axis}]
% I want to add a legend saying "circle"
\draw [black, line width = 0.7mm] (0,0) circle [radius=1.0];
\draw [white, line width = 0.5mm, dash pattern = on 5pt off 5pt] (0,0) circle [radius=1.0];
\addlegendimage{black, line width=0.7mm};
\addplot[blue, line width = 0.3mm]({x}, {1-0.5*x*x} );
% I want to add a legend saying "line"
\draw [green!50!black, line width=0.3mm] (-0.6,1) -- (-0.4,0.95);
\addlegendimage{green!50!black, line width=0.3mm};
\legend {circle, quadratic curve, line};
\end{axis}
\end{tikzpicture}
\end{document}
¿Cómo puedo hacer que la leyenda del círculo tenga el mismo patrón de líneas?
Respuesta1
Usando la opción postaction
(o preaction
), los dos \draw
s se pueden fusionar en uno. Estas dos opciones están documentadas en pgfmanual
, sec. 15.10Realizar múltiples acciones en un caminoen v3.1.5b.
Similar aesta respuesta, un ejemplo de uso postaction
es (tenga en cuenta la opción draw
utilizada en postactions={...}
)
\documentclass[tikz, border=2mm]{standalone}
\begin{document}
\begin{tikzpicture}
\draw
[postaction={draw, white, dash pattern=on 4pt off 4pt, dash phase=4pt, thick}]
[black, ultra thick]
(0,0) rectangle (3,2);
\end{tikzpicture}
\end{document}
Al envolver todas las opciones en un nuevo estilo double colors
, su ejemplo se puede dibujar con (tenga en cuenta lo dash phase=-4pt
agregado a \addlegendimage[...]
)
\documentclass[tikz, border=2mm]{standalone}
\usepackage{pgfplots}
\usepackage{sansmath}
\pgfplotsset{compat=1.17}
\tikzset{
double colors/.style={
postaction={draw, white, line width = 0.5mm, dash pattern = on 5pt off 5pt},
black, line width = 0.7mm
}
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
axis equal,
width=10cm, height=6cm,
font=\sffamily,
ticklabel style = {font=\sansmath\sffamily},
xmin=-0.7,xmax=0, xlabel={$x$}, xtick={-1,-0.9,...,0}, minor xtick={-1,-0.95,...,0},
ymin=0.7,ymax=1.0, ylabel={$y$}, ytick={0, 0.1,...,1}, minor ytick={0, 0.05,...,1},
samples=500,domain=-1:0,
grid=both,
legend pos = south east,
legend cell align = left,
title={\large shapes on axis}]
% I want to add a legend saying "circle"
\draw [double colors] (0,0) circle [radius=1.0];
\addlegendimage{double colors, dash phase=-4pt, line width=0.7mm};
\addplot[blue, line width = 0.3mm]({x}, {1-0.5*x*x} );
% I want to add a legend saying "line"
\draw [green!50!black, line width=0.3mm] (-0.6,1) -- (-0.4,0.95);
\addlegendimage{green!50!black, line width=0.3mm};
\legend {circle, quadratic curve, line};
\end{axis}
\end{tikzpicture}
\end{document}