我有以下生成折线图的代码:
\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 west
或legend 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}
结果是: