Gnuplot:绘制x2轴相对于x1轴的坐标图

Gnuplot:绘制x2轴相对于x1轴的坐标图,plot,gnuplot,multiple-axes,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 我想在x1y1轴上绘制一个关于

我似乎很难在网上找到这个问题的答案。标题是基本问题,但更具体地说,我希望有两个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轴建立关系才能做到这一点吗?任何帮助都将不胜感激。先谢谢你

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

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
。这将使用精确的范围,并且不会将轴扩展到下一个主tic,这将仅对x轴执行,而不会对具有自定义tic的x2轴执行

当然,你也可以逆转这个过程,使用线性标度表示V,并调整p。在任何情况下,对于使用
xtic()
x2tic
放置的自定义tic,数字的使用方式与数据文件中的格式相同

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'

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

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

结果是:


最好的方法是:像往常一样在x1和y1轴上绘制数据,但在x2轴上用x2tic(列号)添加额外的标签:


请看:

谢谢你,克里斯托夫,这正是我所需要的。我有一种感觉,这将是像使用3:2向
添加另一个东西一样简单的事情,但我没有想到使用x2tic。我尝试了更复杂的方法。如果你有时间的话,我还有两个相关的问题。有没有办法不显示x2轴上的每个tic?我尝试了基本的
x2tics 2,2
x2tics(2,4,6)
,但它们似乎都不会影响tic标签。也可以添加tics,但不能添加点(除了将第二个绘图的标题设置为空白并对两个绘图使用相同的样式之外)?@falconskull使用
设置x2tics…
不起作用,因为您有自定义标签。请参见编辑中的最后一个示例如何操作。亲爱的@Christoph,回答得真不错。这是我很久以前就需要的。我试着将这种方法应用到我的情节中,但我不能使它达到我想要的效果。这是我的结果:如果你想帮助我,我有两个问题(很抱歉在这里发布)。我已经尝试了绘制特定标签的条件,但对我来说还不够好。。。我可以手工指定标签吗?另一个问题是,我还可以指定我绘制了多少个x2tics吗?(我的情节太多了)非常感谢@Nikko通常可以使用
set x2tics add(“name”,…)
将标签手动添加到x2轴,其中
是x2轴上的坐标。使用此答案
中显示的特定方法,在此处使用…:x2tic(…)
无法选择绘制多少x2tic。对于每个数据点,您都会得到一个tic,但只有部分数据点会被标记。如果你只需要很少的TIC,你必须手工添加它们。因此,如果我必须手工添加它们,我不能使用该方法,对吗=(
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 ''
set x2tics
set xtics nomirror
plot 'data.txt' using 3:2:x2tic(1) w lp