You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将gnuplot图例设置在绘图区域边界之外?

解决Gnuplot+Cairolatex图例重叠/超出的问题

Gnuplot端直接调整(推荐优先尝试)

  • 把图例移到绘图区域外,这是最省心的办法:
    set key right outside  # 放到绘图区右侧外面
    # 或者放到顶部外面居中
    set key top outside center
    
    还可以加spacing参数调整图例项间距,避免太挤:set key right outside spacing 1.1
  • 用相对坐标定位,别用绝对x/y值:
    绝对坐标容易因图的尺寸变化导致超出,改用graph坐标系(0,0是左下角,1,1是右上角),比如把图例放到右侧外居中:
    set key at graph 1.02, 0.5
    
    1.02是超出右侧2%的位置,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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 11:55:26