У меня есть пара кривых, которые я рисую на оси, но одна из них — это круг, нарисованный «затейливой» линией (я просто наложил толстую черную кривую на немного более тонкую белую пунктирную кривую). Есть ли способ подделать запись легенды, чтобы она соответствовала?
Я посмотрел в руководстве по pgfplots и вижу \addlegendimage
, но \addlegendentry
не могу придумать, как его использовать, за исключением элементарной простой строки:
\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}
Как сделать так, чтобы легенда круга имела тот же рисунок линий?
решение1
Используя option postaction
(или preaction
), два \draw
s могут быть объединены в один. Эти два варианта документированы в pgfmanual
, раздел 15.10Выполнение нескольких действий на путив v3.1.5b.
Похожий наэтот ответ, пример использования postaction
(обратите внимание на опцию, draw
используемую в 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}
Обернув все параметры в новый стиль double colors
, ваш пример можно нарисовать (обратите внимание dash phase=-4pt
на добавленный \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}