我如何强制 pgfplots 坐标系和 tikz 坐标系匹配,为什么它们默认不匹配?

我如何强制 pgfplots 坐标系和 tikz 坐标系匹配,为什么它们默认不匹配?

我使用 绘制了一个函数pgfplots,并想将其与\draw中的一些简单命令结合起来tikz。但令我惊讶的是,坐标系似乎不匹配。绘制的矩形范围从 x=-10 到 x=10,从 y=0 到 y=1,这也是绘制函数的最小值和最大值,但它们并不适合。

我如何强制 pgfplots 坐标系和 tikz 坐标系匹配以及(如果有人知道)这里的问题是什么?

\documentclass[border=3mm]{standalone}
\usepackage{pgfplots}
\usepackage{tikz}
\begin{document}

\begin{tikzpicture}[domain=-10:10]

    \begin{axis}[axis lines=none]
        \addplot {exp(x)/(1+exp(x))};
    \end{axis}
    \draw[thick] (-10,0) rectangle (10,1);

\end{tikzpicture}

\end{document}

叮

答案1

使示例工作:

答案是使用称为“axis cs”的特殊坐标系(参见上面 percusse 给出的评论)

\documentclass[border=3mm]{standalone}
\usepackage{pgfplots}
\usepackage{tikz}

\begin{document}
\thispagestyle{empty}

\begin{tikzpicture}[domain=-10:10]
    \begin{axis}[axis lines=none]
        \addplot {exp(x)/(1+exp(x))};
        \draw[thick] (axis cs: -10,0) rectangle (axis cs: 10,1);        
    \end{axis}
\end{tikzpicture}

\end{document}

在此处输入图片描述

关于“为什么会有差异以及哪些?”这个子问题

首先,我要强调:是的,坐标系之间存在显著差异。而且:是的,这是完全有意为之的;事实上:它是由不同的用例决定的。通常,图是关于数据可视化的:它试图以“充分利用可用空间”的方式将数据坐标映射到可视化坐标中。这需要重新缩放数据。反过来,重新缩放意味着使用不同的坐标系。而 pgfplots 则努力隐藏所有这些复杂性:使用 pgfplots,您只需提供数据和结果大小(如widthheight),pgfplots 就会完成剩下的工作。

有时,人们希望在某种程度上将两者结合起来。您的用例似乎是希望注释可视化,即绘制一些自定义线条。

解决方案是extra y tick结合使用网格线或直接画一条线。如果画一条线,则将绘图指令放在轴内,并用它来(axis cs:-10,0) rectangle (axis cs:10,1)识别“轴坐标系”内的点。

请注意,还有一个不同的用例,它不是数据可视化。有时,人们想要绘制一个图形元素,而它的角由某些坐标标识这一事实与“可视化这些数据”无关。这样的应用程序意味着对任何 TikZ 指令和任何 pgfplots 指令使用完全相同的坐标系。这是可能的,并且是 pgfplots 手册的一部分(称为“TikZ 互操作性”)的主题。从我的角度来看,这是一个相对罕见的用例。

典型用例是通过一些绘图元素(即第一个元素)来丰富数据可视化。Pgfplots 通过附加坐标系(还有几个其他坐标系)支持这一点。它还插入圆/椭圆的创建,以便通过轴单位来表达它们。

相关内容