我有一个包含多个图的轴。这些图可以分为两组,每组都有一个共同的图标记。这些图使用组合循环列表进行样式设置。
然后我想创建一个图例,显示所有不带标记的条目,而是将标记包含在图例内手动创建的“组标题”中。希望我的 MWE 可以解释我的意思:
\documentclass{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
ymax=2,
cycle multiindex* list={
mark=square,mark=o\nextlist
color list
},
legend style={mark options={no markers}},
legend image code/.code={
\draw[domain=0:0.8, mark repeat=12,mark phase=7, mark size=1.5,#1]
plot (\x cm,{0.05cm*sin((\x r)*2*pi/0.8)});
}
]
\addlegendimage{empty legend} % This should produce a single square marker instead
\addlegendentry{Headline 1}
\addplot table {
0 0
1 1
};
\addlegendentry{Data 1 }
\addlegendimage{empty legend} % This should produce a single circle marker instead
\addlegendentry{Headline 2}
\addplot table {
0 0
1 0.5
};
\addlegendentry{Data 2}
\end{axis}
\end{tikzpicture}
\end{document}
这些标记是通过 MS Paint 添加的,以说明我正在寻找的内容。我还重新定义了legend image code
(受数据可视化 tikz 库的启发),并希望保留它以与我的其他图保持一致。我也不希望我的循环列表受到标题插入的影响。
最直接的方法是什么?我尝试使用“不可见”图(使用only markers
和mark options={scale=0}
)来解决这个问题,但这也使得图例条目不可见。在这种情况下,我必须定义自己的图例样式吗?
如果我为每个图单独设置而不是轴选项,这个问题可能就可以解决legend style={mark options={no markers}}
。但这对我来说似乎有点麻烦,我仍然不知道如何添加只在图例中显示的不可见图。
答案1
当我正确理解你的问题时,你走在了正确的轨道上。查看代码中的注释以了解更多详细信息。
\documentclass[border=2mm]{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{
% create a new style for the "curved line legend"
/pgfplots/curved line legend/.style={
legend image code/.code={
% only a line curved line without markers should be drawn
\draw [domain=0:0.8,no markers,#1]
plot (\x cm,{0.05cm*sin((\x r)*2*pi/0.8)});
},
},
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
ymax=2,
cycle multiindex* list={
mark=square,mark=o\nextlist
color list
},
]
% This should produce a single square marker instead
\addlegendimage{mark=square,only marks}
\addlegendentry{Headline 1}
% Apply the style which should be used for the legend entry
% if it should be different to the default style to the `\addplot' command
% in this case it is our previously defined style
\addplot+ [curved line legend] table {
0 0
1 1
};
\addlegendentry{Data 1}
% Same as before
\addlegendimage{mark=o,only marks}
\addlegendentry{Headline 2}
\addplot+ [curved line legend] table {
0 0
1 0.5
};
\addlegendentry{Data 2}
\end{axis}
\end{tikzpicture}
\end{document}