如何将gnuplot图例设置在绘图区域边界之外?
解决Gnuplot+Cairolatex图例重叠/超出的问题
Gnuplot端直接调整(推荐优先尝试)
- 把图例移到绘图区域外,这是最省心的办法:
还可以加set key right outside # 放到绘图区右侧外面 # 或者放到顶部外面居中 set key top outside centerspacing参数调整图例项间距,避免太挤:set key right outside spacing 1.1 - 用相对坐标定位,别用绝对x/y值:
绝对坐标容易因图的尺寸变化导致超出,改用graph坐标系(0,0是左下角,1,1是右上角),比如把图例放到右侧外居中:
1.02是超出右侧2%的位置,0.5是垂直居中,不管图多大都不会乱。set key at graph 1.02, 0.5 - 缩小图例字体或拆分列:
如果图例项太多导致超出,缩小字体或者分成多列:set key font ",8" # 把字体改成8号 set key columns 2 # 图例分成两列
LaTeX端补救方案
如果gnuplot里调不好,直接改生成的.tex文件或者在嵌入时处理:
- 手动调整图例位置:
打开生成的.tex,找到图例对应的tikz代码,改成\node定位,比如:
这样图例就贴在绘图区右侧外面,不会挡数据也不会超出。\node[anchor=west] at (current axis.east) [xshift=5pt] { % 原来的图例内容,比如\legend{Data1, Data2} }; - 裁剪或缩放图形:
用adjustbox宏包,裁剪掉超出部分或缩放整个图:\usepackage{adjustbox} ... \adjustbox{width=\linewidth, clip, trim=0 0 10pt 0}{ \input{your_plot.tex} }trim=0 0 10pt 0表示右边裁剪10pt,刚好去掉超出的图例部分。 - 完全自定义图例:
在gnuplot里先关掉自带图例:set key off,然后在LaTeX里用tikz手动画图例,比如:
这样完全控制图例位置,不会有重叠或超出的问题。\begin{figure}[htbp] \centering \input{your_plot.tex} \begin{tikzpicture}[remember picture, overlay] \node[below=10pt of current axis.south] { \begin{tabular}{cc} \tikz{\draw[red, thick] (0,0)--(0.5,0);} & Data1 \\ \tikz{\draw[blue, thick] (0,0)--(0.5,0);} & Data2 \\ \end{tabular} }; \end{tikzpicture} \caption{Your caption} \end{figure}
内容的提问来源于stack exchange,提问作者sleepydrmike
相关产品推荐
相关产品推荐

