使用森林树和 pgfplots 将节点颜色和节点形状添加到 tikz-picture 中的图例中

使用森林树和 pgfplots 将节点颜色和节点形状添加到 tikz-picture 中的图例中

我想将树的元素添加到图例中(请参阅图例了解说明)。我发现答案,但他们没有解释如何向图例添加其他形状。我在 pgfplots-docs 中没有找到任何有用的东西。我并不局限于使用 pgfplots 来制作图例,如果你有其他解决方案,我很乐意使用它。

\documentclass{standalone} 
\usepackage[dvipsnames,fixpdftex]{xcolor}
\usepackage{forest}
\usetikzlibrary{calc,shadings}

\usepackage{pgfplots}
\pgfplotsset{compat=1.15}

% Code from Christian Feuersänger
% https://tex.stackexchange.com/questions/54794/using-a-pgfplots-style-legend-in-a-plain-old-tikzpicture#54834

% argument #1: any options
\newenvironment{customlegend}[1][]{%
    \begingroup
    % inits/clears the lists (which might be populated from previous
    % axes):
    \csname pgfplots@init@cleared@structures\endcsname
    \pgfplotsset{#1}%
}{%
    % draws the legend:
    \csname pgfplots@createlegend\endcsname
    \endgroup
}%

% makes \addlegendimage available (typically only available within an
% axis environment):
\def\addlegendimage{\csname pgfplots@addlegendimage\endcsname}

%%--------------------------------

% definition to insert numbers
\pgfkeys{/pgfplots/number in legend/.style={%
        /pgfplots/legend image code/.code={%
            \node at (0.295,-0.0225){#1};
        },%
    },
}
\begin{document}

\begin{forest}
for tree={circle,draw,minimum size = 2.25em, l sep=15pt, s sep=3.0em}
[0, fill=Apricot  
    [1, fill=SpringGreen, shape=diamond, for tree={s sep = 3.0em}  
      [$\dots$, draw=none]
    ]
    [2, fill=SpringGreen, shape=star, for tree={s sep = 3.0em}
      [$\dots$, draw=none]
      [8]
    ]
    [3, fill=SpringGreen, shape=diamond      
      [$\dots$, draw=none]
    ]
    [4, fill=Apricot
      [$\dots$, draw=none]      
    ]
    [5, fill=SpringGreen, shape=regular polygon
      [$\dots$, draw=none]      
    ]
]
\begin{customlegend}[
  legend entries={ % <= in the following there are the entries
  Green circle/node here,
  Red circle/node here,
  White Star here, 
  White Diamond here,
  White Polygon here
  },
  legend style={at={(4.5,3.5)},font=\footnotesize}] % <= to define position and font legend
  % the following are the "images" and numbers in the legend
      \addlegendimage{mark=ball,ball color=SpringGreen, draw=white}
      \addlegendimage{mark=ball,ball color=Apricot, draw=white}
      \addlegendimage{stealth-stealth,red,opacity=0.4}
      \addlegendimage{number in legend=1,blue}
      \addlegendimage{number in legend=0,red}
  \end{customlegend}
\end{forest}

\end{document}

在此处输入图片描述

答案1

您可以为图例中添加与当前样式类似的形状样式number in legend,例如称为shape in legend。可以使用 定义形状样式以接受两个参数,即形状和颜色.style 2 args。这通过 调用shape in legend={arg1}{arg2}(请参阅如何使用 pgfplots 绘制来自多个过滤器的数据)。样式本身绘制一个使用形状和填充颜色作为参数的普通节点。

梅威瑟:

\documentclass{standalone} 
\usepackage[dvipsnames]{xcolor}
\usepackage{forest}
\usetikzlibrary{calc,shadings}

\usepackage{pgfplots}
\pgfplotsset{compat=1.15}

% Code from Christian Feuersänger
% https://tex.stackexchange.com/questions/54794/using-a-pgfplots-style-legend-in-a-plain-old-tikzpicture#54834

% argument #1: any options
\newenvironment{customlegend}[1][]{%
    \begingroup
    % inits/clears the lists (which might be populated from previous
    % axes):
    \csname pgfplots@init@cleared@structures\endcsname
    \pgfplotsset{#1}%
}{%
    % draws the legend:
    \csname pgfplots@createlegend\endcsname
    \endgroup
}%

% makes \addlegendimage available (typically only available within an
% axis environment):
\def\addlegendimage{\csname pgfplots@addlegendimage\endcsname}

%%--------------------------------

% definition to insert numbers and shapes
\pgfkeys{/pgfplots/number in legend/.style={%
        /pgfplots/legend image code/.code={%
            \node at (0.295,-0.0225){#1};
        },%
        },
        /pgfplots/shape in legend/.style 2 args={%
        /pgfplots/legend image code/.code={%
            \node[draw,#1,fill=#2,minimum width=3mm] at (0.295,-0.0225){};
        },%
        },
}
\begin{document}

\begin{forest}
for tree={circle,draw,minimum size = 2.25em, l sep=15pt, s sep=3.0em}
[0, fill=Apricot  
    [1, fill=SpringGreen, shape=diamond, for tree={s sep = 3.0em}  
      [$\dots$, draw=none]
    ]
    [2, fill=SpringGreen, shape=star, for tree={s sep = 3.0em}
      [$\dots$, draw=none]
      [8]
    ]
    [3, fill=SpringGreen, shape=diamond      
      [$\dots$, draw=none]
    ]
    [4, fill=Apricot
      [$\dots$, draw=none]      
    ]
    [5, fill=SpringGreen, shape=regular polygon
      [$\dots$, draw=none]      
    ]
]
\begin{customlegend}[
  legend entries={ % <= in the following there are the entries
  Green circle/node here,
  Red circle/node here,
  White Star here, 
  White Diamond here,
  White Polygon here
  },
  legend style={at={(4.5,3.5)},font=\footnotesize}] % <= to define position and font legend
  % the following are the "images" and numbers in the legend
      \addlegendimage{shape in legend={circle}{SpringGreen}}
      \addlegendimage{shape in legend={circle}{red}}
      \addlegendimage{shape in legend={star}{white}}
      \addlegendimage{shape in legend={diamond}{white}}
      \addlegendimage{shape in legend={regular polygon}{white}}
  \end{customlegend}
\end{forest}

\end{document}

结果:

在此处输入图片描述

相关内容