调整 pgfplots

调整 pgfplots

我在控制 pgfplots 中的轴时遇到了麻烦。我为图表定义了一个环境

\newenvironment{graph}[3][]{\begin{figure}[htp]
\def\tempa{#1} %Saves caption since \end cannot take arguments
\begin{center}
\begin{tikzpicture}[scale=1] 
\draw node at (7,0) { \Large     $ #2 $ }; %variable on x-axis
\draw node at (0,6.1) { \Large $ #3 $}; %variable on y-axis
\begin{axis}[
      axis lines=left,
      axis equal,
      %ticks=none,
      %xlabel=$x$,
      %ylabel=$y$,
      %width=8cm,
      %height=8cm,
      domain=0:10.5,
      restrict y to domain=0:10.5
      samples=1000
  ]


}
{
\end{axis}
\end{tikzpicture}
\end{center}
\ifdefempty{\tempa}{}{\caption{\tempa}} %Creates caption if argument is present.
\end{figure}

} 

如您所见,我对轴进行了一些实验。我的问题是,它们的长度不相等。我希望它们具有相同的固定域 0:10.5,并且长度完全相同(厘米)。通常 y 轴比 x 轴短。在第 5 行和第 6 行中,我定义了轴的名称。如您所见,变量位于 6.1,而不是我定义的轴尺寸 10.5 之类的位置。我希望在使用绘制命令时能够使用轴的坐标。

1

如果我将位置设置为 10,节点就会完全错位。

\draw node at (10,0) { \Large    $ #2 $ }; %variable on x-axis

2

最后一个问题是 draw 函数在环境中不起作用

\begin{graph}{x}{y}
\draw[dotted] (0,0) -- (2,2);
\end{graph}

这没有给我任何东西:

3

提前致谢。

答案1

这里有个建议。我使用unit vector ratio=1 1 1而不是axis equal因为axis equal似乎会稍微延长 x 轴,不知道为什么。轴标签使用xlabel/放置ylabel,并通过更改样式来修改位置every axis x label,类似于y。请注意,坐标是相对于轴的,例如(0,1)位于 y 轴的顶部。

(我删除了这些\caption东西,因为我不知道它们\ifdefempty来自哪里,所以那部分不起作用。)

如果您想\draw在环境中使用类似的graph,请使用axis cs坐标系,如下面的示例所示。

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.10}
\newenvironment{graph}[3][]{\begin{figure}[htp]
\centering
\begin{tikzpicture}
\begin{axis}[
      axis lines=middle,
      unit vector ratio=1 1 1,
      every axis x label/.style={at={(1,0)},font=\Large,right},
      every axis y label/.style={at={(0,1)},font=\Large,above},
      xlabel=#2,
      ylabel=#3,
      domain=0:10.5,
      xmin=0,xmax=10.5,
      ymin=0,ymax=10.5,
      samples=100,
      no marks
  ]
}
{
\end{axis}
\end{tikzpicture}
\end{figure}
} 
\begin{document}
\begin{graph}{$x$}{$y$}
\addplot {x};
\addplot {x+1};
\addplot {x-1};
\draw [dotted] (axis cs:0,10.5) -- (axis cs:10.5,10.5) -- (axis cs:10.5,0);
\end{graph}

\begin{graph}{$X$}{$Y$}
\addplot {8*sin(deg(x))*sin(deg(x))};
\draw [thick,latex-latex] (axis cs:1.57,8) to[out=40,in=140] node[above]{random} (axis cs:3.14+1.57,8);
\end{graph}
\end{document}

在此处输入图片描述

相关内容