Como posso desenhar uma linha de legenda "proxy" sofisticada com pgfplots?
Eu tenho algumas curvas que estou desenhando em um eixo, mas uma delas é um círculo desenhado com uma linha "extravagante" (acabei de sobrepor uma curva preta grossa com uma curva tracejada branca ligeiramente mais fina). Existe uma maneira de falsificar uma entrada de lenda para corresponder?
Eu olhei nos pgfplots manual e eu vejo \addlegendimagee \addlegendentry, mas não consigo pensar em como usá-lo, exceto por uma simples linha rudimentar:
\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}
Como posso fazer com que a legenda do círculo tenha o mesmo padrão de linha?
Respostas
Usando a opção postaction(ou preaction), os dois \draws podem ser fundidos em um. Essas duas opções estão documentadas em pgfmanual, sec. 15.10 Fazendo várias ações em um caminho na v3.1.5b.
Semelhante a esta resposta , um exemplo usando postactioné (observe a opção drawusada em 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}
Ao envolver todas as opções em um novo estilo double colors, seu exemplo pode ser desenhado por (observe o dash phase=-4ptadicionado 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}