在手动“组”图例条目中使用单个图标记

在手动“组”图例条目中使用单个图标记

我有一个包含多个图的轴。这些图可以分为两组,每组都有一个共同的图标记。这些图使用组合循环列表进行样式设置。

然后我想创建一个图例,显示所有不带标记的条目,而是将标记包含在图例内手动创建的“组标题”中。希望我的 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 添加标记

这些标记是通过 MS Paint 添加的,以说明我正在寻找的内容。我还重新定义了legend image code(受数据可视化 tikz 库的启发),并希望保留它以与我的其他图保持一致。我也不希望我的循环列表受到标题插入的影响。

最直接的方法是什么?我尝试使用“不可见”图(使用only markersmark 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}

该图显示了上述代码的结果

相关内容