额外轴的不必要的拉伸和平移

额外轴的不必要的拉伸和平移

考虑以下代码:

\documentclass{standalone}
\usepackage{tikz,pgfplots,siunitx}
\pgfplotsset{compat=newest}
\begin{document} 
\begin{tikzpicture}

%% 1st and 2nd waveforms
\begin{axis}[
    scale only axis,
    axis y line*=left,
    axis x line*=bottom,
    xlabel={Time [\si{s}]},
    ylabel={Current [\si{\A}]},
    grid=major
]
\addplot [blue, line width = 1, smooth] 
table[x=t,y=ch1,col sep=comma]{myDataFile.csv};
\addplot [green, line width = 1, smooth] 
table[x=t,y=ch2,col sep=comma]{myDataFile.csv};
\end{axis}
%% Here starts the 3rd waveform
\begin{axis}[
    scale only axis,
    axis y line*=right,
    axis x line*=bottom,
    xlabel={Time [\si{s}]},
    ylabel={Voltage (Normalised)}
    %grid=major
]
\addplot [red, line width = 1, smooth]
table[x=t,y=ch3,col sep=comma]{myDataFile.csv};
\end{axis}
   
\end{tikzpicture}
\end{document}

myDataFile.csv文件内容如下:

%myDataFile.csv%
t,ch1,ch2,ch3
-4,-2,0.0625,0.756
-3,-1.5,0.125,-0.141
-2,-1,0.25,-0.909
-1,-0.5,0.5,-0.841
0,0,1,0
1,0.5,2,0.841
2,1,4,0.909
3,1.5,8,0.141
4,2,16,-0.758

事实是,第三个波形被平移(向上约 6 个单位)并且被拉伸,因此它延伸了由ch1或 的最小值(两者中较小的一个)和或 的ch2最大值(两者中较大的一个)决定的整个垂直跨度。ch1ch2

在上面的例子中,ch3(红色)是从 t=-4 到 t=+4 绘制的正弦函数,因此它在垂直方向上的范围是 -1 到 1。如您所见,它绘制得不正确。(ch1y=-t/2,并且ch22^t

在此处输入图片描述

我正在关注代码答案,关于在一个“画布”上绘制两个函数。

从我在该链接答案的内嵌图片中看到的情况来看,同样的效果也适用于那里。

我怎样才能避免这种情况并按ch3原样进行绘制?

为了阐明我的观点,我想要一些如下所示的东西(绘制在德斯莫斯):

期望输出

请注意,与曲线相比,正弦波在垂直方向上的跨度如何2^t。它实际上是从 -1 到 +1,其“x 轴”与其他两条曲线的 x 轴重合。但是,它描述的是不同的物理量,因此“值得”使用不同的标签和刻度,绘制在右边缘。

此外,我如何指示pgfplots将其在垂直方向上拉伸,例如,每个值输入拉伸 2 倍?我找到了一个问题关于缩放数据集,但我不知道如何对从文件导入的数据进行缩放,csv就像这里的情况一样。

答案1

您需要将两个轴的 y 限值设置为相同的值,因此添加ymin=-4, ymax=17。有几种方法可以做到这一点,您可以将其分别添加到两个轴,您可以执行\pgfplotsset{common axis settings/.style={ymin=-4, ymax=17}}然后添加common axis settings到两个axis选项,或者简单地在 和\pgfplotsset{ymin=-4, ymax=17}之间添加\begin{tikzpicture}第一个\begin{axis}

我可能会删除smooth,它将在采样点之间使用贝塞尔曲线而不是直线,以及第二个轴的 x 刻度和标签(当前是重复的)。

正如评论中所提到的,您可以使用 Jake 在您所链接的答案中描述的缩放图的方法,我也在下面的代码中演示了这一点。

在此处输入图片描述

\documentclass[border=5mm]{standalone}
\usepackage{pgfplots,siunitx}
\pgfplotsset{compat=newest}
\begin{document} 
\begin{tikzpicture}
\pgfplotsset{
  ymin=-4,
  ymax=17,
  every axis plot/.append style={
    line width = 1,
    % if you want to add markers as in the Desmos plot, uncomment this
%      mark=*,
%      mark size=2
     }
  }
%% 1st and 2nd waveforms
\begin{axis}[
    scale only axis,
    axis y line*=left,
    axis x line*=bottom,
    xlabel={Time [\si{s}]},
    ylabel={Current [\si{\A}]},
    grid=major
]
\addplot [blue] table[x=t,y=ch1,col sep=comma] {myDataFile.csv};
\addplot [green] table[x=t,y=ch2,col sep=comma] {myDataFile.csv};
\end{axis}

%% Here starts the 3rd waveform
\begin{axis}[
    scale only axis,
    axis y line*=right,
    axis x line*=bottom,
    xtick=\empty,
%    xlabel={Time [\si{s}]},
    ylabel={Voltage (Normalised)},
    ylabel style={red}
]
\addplot [red] table[x=t,y=ch3,col sep=comma] {myDataFile.csv};
\addplot [red, densely dashed] table[x=t,y expr=\thisrow{ch3}*2,col sep=comma] {myDataFile.csv};
\end{axis}
   
\end{tikzpicture}
\end{document}

相关内容