pgfplots 手册中有多个 y 坐标的图表示例,但它们并没有给出我期望的输出。这是我的代码:
\begin{tikzpicture}
\begin{axis}[
scale only axis,
xlabel={Input voltage [V]},
ylabel={left axis},
axis y line*=left,
grid=both,
xmin=0,
xmax=1.8,
ymin=-5,
ymax=90,
width=5cm,
height=5cm,
mark size=2.0pt,
]
\addplot[blue, mark=o] table [x=Vin, y=fg_pc, col sep=comma] {csv/fg_Adc_DC_sweep.csv};
\end{axis}
\begin{axis}[
scale only axis,
xmin=0,
xmax=1.8,
axis x line=none,
axis y line*=right,
ymin=-6,
ymax=2,
grid=both,
ylabel={right axis},
width=5cm,
height=5cm,
]
\addplot[orange, mark=o] table [x=Vin, y=Adc, col sep=comma] {csv/fg_Adc_DC_sweep.csv};
\end{axis}
\end{tikzpicture}
请注意,我的 csv 文件中的值与第一张图片上的值不同。还请注意,我需要明确设置两个轴的宽度和高度,否则两个 y 轴的大小不一样。此代码编译如下:
我遇到的问题:
1)我怎样才能匹配第一张图片中的网格?
2) 我如何更改轴的颜色。我尝试按照以下解决方案操作这里。该示例编译时没有错误,但根本没有改变我的情节前景。有没有更好更简单的解决方案?
3)我怎样才能将第二个 y 标签也放到右侧?
非常感谢您的建议!
答案1
对于 3),添加
\pgfplotsset{compat=1.3}
到序言部分。(或者更高的版本号,当前版本是 1.16。)
关于尺寸,您可以创建一种样式,为两个轴设置通用选项,这样就可以避免代码重复。请参阅下面的示例。
对于 2),设置例如
y axis line style={blue},
y tick label style={blue},
使轴线和刻度标签变成蓝色。在下面的示例中,我将它们设为上述样式的一部分,并将颜色名称设为样式的参数。
1) 可能是最棘手的,但你只需要一点数学知识。我还没有尝试过自动化。假设左轴从 -10 到 90,刻度为 0、20、...、80。这意味着第一个刻度是轴上范围的 10%,刻度之间的步长是范围的 20%。
因此,要使刻度和网格对齐,您需要确保右轴遵循相同的规则。在您的例子中,右轴的范围从 -6 到 2。范围是 8,因此 10% 是 0.8,第一个刻度应为 -5.2。刻度之间的步长是 20%,即 1.6。
因此,
ymin=-10,
ymax=90,
ytick={0,20,...,80},
在左边,你需要
ymin=-6,
ymax=2,
ytick={-5.2,-3.6,...,2},
在右侧。
我当然没有你的数据文件(如果你能举一个不依赖于我们无权访问的文件的例子那就最好了),所以我只是使用了一个随机函数。
\documentclass[border=5mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.3}
\begin{document}
\begin{tikzpicture}
\pgfplotsset{
myaxis/.style={
scale only axis,
width=5cm,
height=5cm,
xmin=0,
xmax=1.8,
y axis line style={#1},
y tick label style={#1},
}
}
\begin{axis}[
myaxis={blue},
xlabel={Input voltage [V]},
ylabel={left axis},
axis y line*=left,
grid=both,
ymin=-10,
ymax=90,
ytick={0,20,...,80},
mark size=2.0pt,
]
\addplot[blue, mark=o] {rnd*50};
\end{axis}
\begin{axis}[
myaxis={red},
axis x line=none,
axis y line*=right,
ymin=-6,
ymax=2,
ytick={-5.2,-3.6,...,2},
ylabel={right axis},
]
\addplot[orange, mark=o] {rnd*3-2};
\end{axis}
\end{tikzpicture}
\end{document}