pgfplots:如何對齊多重圖的圖例?

pgfplots:如何對齊多重圖的圖例?

假設我們有以下 MWE 在一張圖表中顯示各種圖表。


最小工作範例(MWE):

\documentclass[border=5mm]{standalone}
\usepackage{pgfplots}

\pgfplotsset{compat=newest, scale only axis}

\begin{document}

\begin{tikzpicture}
\begin{axis}[
            axis y line*                                = left,
            legend style                                = {at={(0.5,-0.125)},
                anchor                                  = north,
                legend columns                          = 3,
                /tikz/every even column/.append style   = {column sep=0.5cm},
                /tikz/every odd column/.append style    = {column sep=0.15cm},
                },
            ]%
            \addplot coordinates {(0,0) (1,1)};
            \legend{Graph 1};
\end{axis}%
%
\begin{axis}[
            axis x line                                 = none,
            axis y line*                                = right,
            legend style                                = {at={(0.5,-0.125)},
                anchor                                  = north,
                legend columns                          = 3,
                /tikz/every even column/.append style   = {column sep=0.5cm},
                /tikz/every odd column/.append style    = {column sep=0.15cm},
            },
            ]%
            \addplot coordinates {(0,1) (1,0)};
            \addplot coordinates {(0,0.5) (1,0.5)};
            \legend{Graph 1, Graph 2};
\end{axis}%
%
\begin{axis}[
            axis x line                                 = none,
            axis y line*                                = right,
            legend style                                = {at={(0.5,-0.125)},
                anchor                                  = north,
                legend columns                          = 3,
                /tikz/every even column/.append style   = {column sep=0.5cm},
                /tikz/every odd column/.append style    = {column sep=0.15cm},
            },
            ]%
            \pgfplotsset%
                {%
                every outer y axis line/.style          = {xshift=2cm},
                every tick/.style                       = {xshift=2cm},
                every y tick label/.style               = {xshift=2cm},
                }%
            \addplot coordinates {(0.5,0) (0.5,1)};
            \legend{Graph 4};
\end{axis}%

\end{tikzpicture}

\end{document}

結果截圖:

結果截圖


問題說明:

正如你所看到的,傳說看起來非常醜陋。如何調整圖下方居中的圖例?


更新:

我已經發文了進一步的問題關於如何將圖例項目對齊兩行或兩列以使它們更好地顯示。

答案1

你可以用legend to name它。

\documentclass[border=5mm]{standalone}
\usepackage{pgfplots}
\usetikzlibrary{positioning}
\pgfplotsset{compat=newest, scale only axis}
\begin{document}

\begin{tikzpicture}
\begin{scope}[local bounding box=plots]
 \begin{axis}[
             axis y line*                                = left,
             legend to name                             = legA,
             legend style                                = {
                 legend columns                          = 3,
                 /tikz/every even column/.append style   = {column sep=0.5cm},
                 /tikz/every odd column/.append style    = {column sep=0.15cm},
                 },
             ]%
             \addplot coordinates {(0,0) (1,1)};
             \legend{Graph 1};
 \end{axis}%
 %
 \begin{axis}[
             axis x line                                 = none,
             axis y line*                                = right,
             legend to name                             = legB,
             legend style                                = {
                 legend columns                          = 3,
                 /tikz/every even column/.append style   = {column sep=0.5cm},
                 /tikz/every odd column/.append style    = {column sep=0.15cm},
             },
             ]%
             \addplot coordinates {(0,1) (1,0)};
             \addplot coordinates {(0,0.5) (1,0.5)};
             \legend{Graph 1, Graph 2};
 \end{axis}%
 %
 \begin{axis}[
             axis x line                                 = none,
             axis y line*                                = right,
             legend to name                             = legC,
             legend style                                = {
                 legend columns                          = 3,
                 /tikz/every even column/.append style   = {column sep=0.5cm},
                 /tikz/every odd column/.append style    = {column sep=0.15cm},
             },
             ]%
             \pgfplotsset%
                 {%
                 every outer y axis line/.style          = {xshift=2cm},
                 every tick/.style                       = {xshift=2cm},
                 every y tick label/.style               = {xshift=2cm},
                 }%
             \addplot coordinates {(0.5,0) (0.5,1)};
             \legend{Graph 4};
 \end{axis}%
\end{scope}
\node[below=0.5em of plots.south] (legB) {\ref{legB}};
\node[left=1em of legB] (legA) {\ref{legA}};
\node[right=1em of legB] (legC) {\ref{legC}};
\end{tikzpicture}

\end{document}

在此輸入影像描述

所有圖例都集中在一個盒子中:

\documentclass[border=5mm]{standalone}
\usepackage{pgfplots}
\usetikzlibrary{positioning}
\pgfplotsset{compat=newest, scale only axis}
\begin{document}

\begin{tikzpicture}
\begin{scope}[local bounding box=plots]
 \begin{axis}[
             axis y line*                                = left,
             legend to name                             = legA,
             legend style                                = {draw=none,
                 legend columns                          = 3,
                 /tikz/every even column/.append style   = {column sep=0.5cm},
                 /tikz/every odd column/.append style    = {column sep=0.15cm},
                 },
             ]%
             \addplot coordinates {(0,0) (1,1)};
             \legend{Graph 1};
 \end{axis}%
 %
 \begin{axis}[
             axis x line                                 = none,
             axis y line*                                = right,
             legend to name                             = legB,
             legend style                                = {draw=none,
                 legend columns                          = 3,
                 /tikz/every even column/.append style   = {column sep=0.5cm},
                 /tikz/every odd column/.append style    = {column sep=0.15cm},
             },
             ]%
             \addplot coordinates {(0,1) (1,0)};
             \addplot coordinates {(0,0.5) (1,0.5)};
             \legend{Graph 1, Graph 2};
 \end{axis}%
 %
 \begin{axis}[
             axis x line                                 = none,
             axis y line*                                = right,
             legend to name                             = legC,
             legend style                                = {draw=none,
                 legend columns                          = 3,
                 /tikz/every even column/.append style   = {column sep=0.5cm},
                 /tikz/every odd column/.append style    = {column sep=0.15cm},
             },
             ]%
             \pgfplotsset%
                 {%
                 every outer y axis line/.style          = {xshift=2cm},
                 every tick/.style                       = {xshift=2cm},
                 every y tick label/.style               = {xshift=2cm},
                 }%
             \addplot coordinates {(0.5,0) (0.5,1)};
             \legend{Graph 4};
 \end{axis}%
\end{scope}
\node[below=0.5em of plots.south] (legB) {\ref{legB}};
\node[left=0.2em of legB] (legA) {\ref{legA}};
\node[right=0.2em of legB] (legC) {\ref{legC}};
\draw (legA.south west) rectangle (legC.north east);
\end{tikzpicture}
\end{document}

在此輸入影像描述

相關內容