如何在图表下方放置图例?

如何在图表下方放置图例?

我有以下生成折线图的代码:

\begin{figure}[p]
    \centering
\begin{tikzpicture}
    \begin{axis}[
    use units,
    cycle list name=exotic, %This defines the color. It produces nicer colors
        width=15cm, height=8cm,     % size of the image
        grid = major,
        grid style={dashed, gray!30},
        %xmode=log,log basis x=10,
        %ymode=log,log basis y=10,
        xmin=0,     % start the diagram at this x-coordinate
        ymin=0,     % start the diagram at this y-coordinate
        %/pgfplots/xtick={0,5,...,60}, % make steps of length 5
        %extra x ticks={23},
        %extra y ticks={0.507297},
        axis background/.style={fill=white},
        ylabel=Time,
        xlabel=Number of Datapoints (n),
        y unit=s,y unit prefix=m,
        tick align=outside]

      % import the correct data from a CSV file
      \addplot table [col sep=comma,trim cells=true,y=Best Case (Ascending)] {datasets/time_mergesort.txt};
          \addplot table [col sep=comma,trim cells=true,y=Average Case (Random)] {datasets/time_mergesort.txt};
                    \addplot table [col sep=comma,trim cells=true,y=Worst Case (Descending)] {datasets/time_mergesort.txt};
                     \legend{Ascending,Random,Descending}
    \end{axis} 
\end{tikzpicture}
    \caption{Mergesort Run Time for Sorting Random Data}
    \label{fig:merge_sort_from_csv}
\end{figure}

目前图例出现在图表的右上角。我需要将其移到图表下方,或者将其保留在图表上,但将其移到左上角。

我已经尝试过提到的解决方案这个问题,但它对我不起作用。

我怎样才能将轴移动到不同的位置?

答案1

pgfplots定义了几个快捷方式legend pos设置,如其第 4.9.5 节所定义手动的;这里您可以选择legend pos=north westlegend pos=outer north east,这是目前轴框外唯一预定义的图例位置。

如果你想把它放在其他位置,这些legend pos键只是

legend style={at={(<x>,<y>)},anchor=<name>}

其中<x><y>是关于rel axis cs(在轴箱的宽度和高度上范围从0到1)。

以下是几种可能性:

\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.12}

\begin{document}
\begin{tikzpicture}
\begin{axis}[legend pos=north west]
  \addplot {x};
  \addlegendentry{$x$}
  \addplot {x^2};
  \addlegendentry{$x^2$}
\end{axis}
\end{tikzpicture}

\begin{tikzpicture}
\begin{axis}[legend pos=outer north east]
  \addplot {x};
  \addlegendentry{$x$}
  \addplot {x^2};
  \addlegendentry{$x^2$}
\end{axis}
\end{tikzpicture}

\begin{tikzpicture}
\begin{axis}[legend style={at={(0.5,-0.1)},anchor=north}]
  \addplot {x};
  \addlegendentry{$x$}
  \addplot {x^2};
  \addlegendentry{$x^2$}
\end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

在此处输入图片描述

在此处输入图片描述


评论提示了更通用的解决方案

原始答案侧重于没有 的情况xlabel。如果有,并且您希望图例出现在 下方xlabel,您可以在键值中手动调整图例的 x 和 y 坐标at。但是,如果标签的大小或轴的比例发生变化,所需的坐标也可能会发生变化。

因此,在我看来,更好的方法是使用命名图例。这允许您在当前轴关闭并且其大小/边界框已知后单独打印图例。请参阅第 4.9.7 节现行pgfplots手册了解详细信息。可以说,at={(<x>,<y>)}即使在没有的情况下,这也比我原来的解决方案更好xlabel,因为这避免了需要为坐标想出神奇的数字。

调整上面的例子,这个新方法看起来会像这样:

\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.12}

\begin{document}
\begin{tikzpicture}
\begin{axis}[legend to name=myfancyname,xlabel={Test}]
  \addplot {x};
  \addlegendentry{$x$}
  \addplot {x^2};
  \addlegendentry{$x^2$}
\end{axis}
\node[anchor=north] at (current axis.below south) {\ref{myfancyname}};
\end{tikzpicture}
\end{document}

结果是:

在此处输入图片描述

相关内容