Gnuplot:相对于x1轴绘制x2轴

fal*_*ull 7 plot gnuplot multiple-axes

我似乎在网上找到这个问题的答案有些困难.标题是基本问题,但更具体地说,我希望有两个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
Run Code Online (Sandbox Code Playgroud)

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

Chr*_*oph 15

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

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'
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我首先绘制T wrt P on x1y1.然后我绘制T wrt V on x2y1并使用P的范围和tic位置,但使用V值作为x2轴的tic标签.这给出了一个线性标尺为P和适应V相应.

为了使其工作,你必须使用set autoscale xfixset autoscale x2fix.这使用精确范围,并且不会将轴扩展到下一个主要抽搐,这将仅针对x轴,而不针对具有自定义抽搐的x2轴.

您当然也可以反转过程并使用V的线性标度并调整P tics.在任何情况下,对于与xtic()或一起放置的自定义抽搐,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'
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

在这里,两个绘图线都显示了这些点,以证明它们真正重合.

为了具有一个命令只产生xtics,可以使用NaNy-值.如果只有一些自定义抽搐应该是标签,则需要在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 ''
Run Code Online (Sandbox Code Playgroud)

结果如下:

在此输入图像描述