9

我似乎很难在网上找到这个问题的答案。标题是基本问题,但更具体地说,我想有两个 x 轴,一个在图的顶部,它依赖于底部的一个。但是,这不是一个简单的关系,即 x2!=5*x1 或类似的东西。关系由数据文件本身给出。所以更具体地说,我有一个看起来像这样的文件:

 V     T       P
2.0   15.0   0.586
3.0   17.4   0.798
4.0   25.3   1.023
5.0   28.9   1.124
6.0   30.2   1.456

我想在 x1y1 轴上相对于 (wrt) P 绘制 T 的图,并在 x2y1 轴上绘制 T wrt V。因此x1 轴将显示P 范围,x2 将在x1 的相应位置显示V 范围,即x1 轴上的0.586 将在x2 轴上的同一位置显示2.0。这在 Gnuplot 中实际上是可能的,还是我必须与两个 x 轴建立关系才能做到这一点?任何帮助将不胜感激。先感谢您。

4

2 回答 2

18

这是您如何实现这一目标的方法。我首先向您展示脚本和结果,然后再解释步骤:

reset
set xtics nomirror
set x2tics
set autoscale xfix
set autoscale x2fix
set xlabel 'P'
set ylabel 'T'
set x2label 'V'
plot 'data.txt' using 3:2 with linespoints ps 2 lw 2 title 'T wrt P', \
     '' using 3:2:x2tic(1) axes x2y1 with points ps 2 lw 2 title 'T wrt V'

在此处输入图像描述

我首先在 上绘制T wrt Px1y1。之后,我绘制T wrt V onx2y1并为此使用P的范围和 tic 位置,但使用V值作为 x2 轴的 tic 标签。这给出了P的线性比例并相应地调整V。

为了使其工作,您必须使用set autoscale xfixand set autoscale x2fix。这使用了精确的范围,并且不会将轴扩展到下一个主要抽动,这仅适用于 x 轴,而不适用于具有自定义抽动的 x2 轴。

当然,您也可以反转该过程并为V使用线性比例并调整P tics。xtic()在任何情况下,对于使用或放置的自定义 tic,x2tic数字的使用方式就像它们在数据文件中的格式一样。

reset
set xtics nomirror
set x2tics 1
set autoscale xfix
set autoscale x2fix
set xlabel 'P'
set ylabel 'T'
set x2label 'V'
plot 'data.txt' using 1:2:xtic(3) with linespoints ps 2 lw 2 title 'T wrt P', \
     '' using 1:2 axes x2y1 with points ps 2 lw 2 title 'T wrt V'

在此处输入图像描述

在这里,显示了两条绘图线的点,以证明它们确实重合。

为了让一个命令只生成 xtics,可以使用NaN-value y。如果只有一些自定义抽动应该是标签,则需要在x2tic调用中进行适当的检查。在这里,我只为所有偶数行设置标签,$0即当前行号,从0) 开始:

reset
set xtics nomirror
set x2tics
set autoscale xfix
set autoscale x2fix
set xlabel 'P'
set ylabel 'T'
set x2label 'V'
plot 'data.txt' using 3:2 with linespoints ps 2 lw 2 title 'T wrt P', \
     '' using 3:(NaN):x2tic((int($0) % 2) ? '' : stringcolumn(1)) axes x2y1 t ''

结果:

在此处输入图像描述

于 2013-10-01T18:53:56.823 回答
2

最好的方法:像往常一样在 x1 和 y1 轴上绘制数据,但使用 x2tic(column_number) 在 x2 轴上放置额外的标签:

set x2tics
set xtics nomirror
plot 'data.txt' using 3:2:x2tic(1) w lp

请参阅:相对于 x2 轴在 x1 中绘制 y1

于 2018-03-17T22:13:45.417 回答