Pgfplots:设置绘图边距

Pgfplots:设置绘图边距

pgfplots 中是否有可能设置为 x 和 y 标签保留的边距,类似于 gnuplots tmargin、bmargin、lmargin、rmargin。

我希望水平方向有以下值。

lmargin: 0.3in
graphwidth=\columnwidth-0.4in
rmargin: 0.1in
plotwidth: \columnwidth (=picture width)

对于垂直方向:

bmargin: 0.3in
graphheight=4in-0.4in
tmargin: 0.1in
plotheight: 4in (=picture height)

以下最小工作示例尝试仅缩放轴(选项scale only axis),然后相应地用负值进行修剪。

梅威瑟:

\documentclass[class=elsarticle,preprint,5p,twocolumn, 10pt]{standalone}
% NOTE: 'standalone' messes up \textheight,
% \textwidth and \columnwidth (252pt) are fine
\usepackage{pgfplots}
\usetikzlibrary{calc}
\usetikzlibrary{positioning}
\pgfplotsset{compat=1.12,width=\columnwidth,height=4in}
\begin{document}
\begin{tikzpicture}[trim left=-0.3in, trim right=\columnwidth-0.3in]
% why is there no trim top or bottom?
\begin{axis}[width=\columnwidth-0.4in, height=4in-0.3in, scale only axis]
\addplot [red, mark=*] table {
0 1
2 5.5
3 7.25
4 8
};
\end{axis}
\end{tikzpicture}
\end{document}

检查 pdf 尺寸:

$ pdfinfo *.pdf | grep "Page size:"
Page size:      251.059 x 279.86 pts

宽度几乎正确:251.059pt 而不是 252pt。可能是数值错误(仅单精度)。所以我可以忍受。

但是没有顶部装饰和底部装饰。我找不到解决方法。有人能帮我吗?

也可能是裁剪的问题standalonetikzscale速度真的很慢,所以我宁愿避免它。应该有一张最终的图片,我可以提交给期刊。

答案1

通过调整边界框来设置\pgfresetboundingbox边距scale only axis

Pgfplots 手册在第 4.20.1 章中描述了如何调整边界框边界框限制(v1.12)

% Measures:
% ---------
% total width  = \columnwidth = 252pt = 3.49in
% total height = 4in = 288pt
% lmargin      = 0.4in
% rmargin      = 0.1in
% bmargin      = 0.4in
% tmargin      = 0.1in
% graph width  = \columnwidth - 0.5in
% graph height = 4in - 0.5in

平均能量损失

\documentclass[class=elsarticle, preprint, 5p, twocolumn, 10pt]{standalone}
\usepackage{pgfplots}
\usetikzlibrary{backgrounds}% required for 'inner frame sep' or 'tight background'
\pgfplotsset{compat=1.12}

\begin{document}
\begin{tikzpicture}[inner frame sep=0]
% 'tight background' is identical to 'inner frame sep=0'

  \begin{axis}[
      width=\columnwidth-0.5in,
      height=4in-0.5in,
      scale only axis,
      ylabel=Y-Value,
      xlabel=X-Value
    ]
    \addplot [red, mark=*] table {
    0 1
    2 5.5
    3 7.25
    4 8
    };
  \end{axis}

% Set margins by adjusting the bounding box:
\pgfresetboundingbox
\path
  (current axis.south west) -- ++(-0.4in,-0.4in)
  rectangle (current axis.north east) -- ++(0.1in,0.1in);
\end{tikzpicture}
\end{document}

笔记

  • \pgfresetboundingboxexternal与库不兼容
  • inner frame xsep/ysep通过不允许独立设置 lmargin 和 rmargin 来调整边距(tmargin 和 bmargin 相同)(@zeroth 在评论中建议)

确认的措施

$ pdfinfo *.pdf | grep "Page size:"
Page size:      251.055 x 287.996 pts

相关内容