pgfplots - 两个彩色 y 坐标与匹配网格

pgfplots - 两个彩色 y 坐标与匹配网格

我想复制 pgfplots 中如下所示的图形样式: 在此处输入图片描述

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}

相关内容