我似乎很难在网上找到这个问题的答案。标题是基本问题,但更具体地说,我希望有两个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轴有关系才能做到这一点?任何帮助将不胜感激。先感谢您。
答案 0 :(得分: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'
我首先在x1y1
上绘制 T wrt P 。然后我在x2y1
上绘制 T wrt V ,并使用 P 的范围和tic位置,但使用 V 值作为x2轴的tic标签。这为 P 提供了线性标度,并相应地调整了 V 。
为了实现此目的,您必须使用set autoscale xfix
和set autoscale x2fix
。这使用了精确的范围,并且不会将轴扩展到下一个主要抽搐,这将仅针对x轴,而不针对具有自定义抽搐的x2轴。
您当然也可以反转过程并使用 V 的线性比例并调整 P 抽动。在任何情况下,对于使用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'
这里,两个情节线都显示了这些点,以证明它们确实重合。
为了让one命令只生成xtics,可以使用NaN
作为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 ''
结果:
答案 1 :(得分:0)
最佳方法:在x1和y1轴上照常绘制数据,但在x2轴上使用x2tic(1)放置其他标签:
set x2tics
set xtics nomirror
plot 'data.txt' using 3:2:x2tic(1) w lp