pgfplot设置图片宽度的逻辑是什么?

pgfplot设置图片宽度的逻辑是什么?

如果代码是:

\begin{tikzpicture}[]
  \begin{axis}[
      axis lines=middle,%axis equal,
      ymin=-4,ymax=9,
      xmin=-1.5, xmax=57,
      xtick={0,1,...,7},
      ytick={1,...,8},
      xlabel={$x$},
      xlabel style={anchor=west},
      ylabel={$y$},
      ylabel style={anchor=east},
      grid=both,grid style={line width=0.6pt, draw=gray!10},
      samples=2 
    ]
    \addplot[blue!50,domain=-16:6,name path=plot1,dashed] {-(5/6)*x+(29/6)}
      node[near start,sloped]{$5x+6y=29$};
    \addplot[blue!50,domain=-2.5:6,name path=plot2,dashed]{-(9/4)*x+(35/4)}
      node[fdesc]{$9x+4y=35$};
      \addplot[red,domain=-1:6,name path=plot3,<->,thick]{-(5/4)*x+6}
      node[fdesc]{target};
  \end{axis}
\end{tikzpicture}

然后它看起来像 在此处输入图片描述

我想知道为什么没有pgfplots生成宽幅图片?即使我将设置xmax为适当的值,比如说7,那么现在它就变成了

在此处输入图片描述

在我看来,图片的实际宽度是恒定的。但我无法从代码中的哪一部分看出我需要系统这样做。那么,如何理解pgfplots图片设置多宽的逻辑呢?

答案1

代码中实现这一点的部分是\begin{axis}\end{axis},这需要\usepackage{pgfplots}

TikZ 长期以来一直能够绘制函数,例如使用

\draw plot (\x,2*\x);

问题在于,在大多数情况下,您必须缩放图表才能获得合理的图表大小,如果您想要带有刻度和刻度标签的轴,则必须手动构建它们。而且我认为没有任何方法可以用这种方法轻松地从文本文件中读取数据。1

但 TikZ 是一个用于制作图表的通用库。pgfplots另一方面,它专门用于绘制数据或函数,其中一部分工作是缩放数据,以便轴获得合理的大小,而不管数据的范围如何。如果您在其他程序(如、、matplotlibMatlab bokeh、Excel 等)中绘制数据,那么这就是您所期望的。

轴的默认大小在pgfplots手册的第 4.10.1 节中给出,为

  • 宽度为 240pt,并且
  • 高度为207pt。

width(1pt = 1/72.27 英寸,因此约为 8.4 厘米和 7.3 厘米)。您可以使用和键更改尺寸height,这些键可以添加到 的选项中axis,例如

\begin{axis}[
  width=5cm,
  height=3cm,
  ...

另外需要注意的是,默认情况下宽度和高度应包括轴标签和刻度标签,因此轴框架本身较小。您可以使用 覆盖它scale only axis,因此使用

\begin{axis}[
  width=5cm,
  height=3cm,
  scale only axis,
  ...

总宽度为 5 厘米加上 y 轴上的标签/刻度标签所添加的宽度。


1 TikZ 版本 3 引入了一个新库,datavisualization其目的与 相同pgfplots,即绘制数据或函数的图表。它仍然比我想象的更加有限pgfplots,而且方法也略有不同。

相关内容