我有两个数据系列:
2.72121 -1326.8380227810
2.81569 -1326.8407684060
2.91018 -1326.8428301680
3.00466 -1326.8448265650
3.09915 -1326.8470902260
3.19364 -1326.8497826100
3.28812 -1326.8530603940
3.38261 -1326.8571516770
3.47710 -1326.8628214990
3.57158 -1326.8694360090
3.66607 -1326.8759488230
3.76056 -1326.8820177910
3.85504 -1326.8875129030
3.94953 -1326.8923946780
4.04401 -1326.8966652370
4.13850 -1326.9003601490
4.23299 -1326.9035228070
和
4.23299 -1326.9035228070
4.13850 -1326.9003601490
4.04401 -1326.8966652370
3.94953 -1326.8923946780
3.85504 -1326.8875129030
3.76056 -1326.8820177910
3.66607 -1326.8759488230
3.57158 -1326.8694360090
3.47710 -1326.8628214990
3.38261 -1326.8571516770
3.28812 -1326.8530603940
3.19364 -1326.8497826100
3.09915 -1326.8470902260
3.00466 -1326.8448265650
2.91018 -1326.8428301680
2.81569 -1326.8407684060
2.72121 -1326.8380227810
是相同的数据系列,但顺序相反。这是第一个系列:
那是第二个:
完整的gnuplot代码是:
set loadpath 'C:\Users\sjojungfrun\Programs\gnuplot\palettes'
load 'parula.pal'
set lmargin 10
unset key
set xtics font 'arial,16'
set ytics font 'arial,16'
set grid ytics
e_kcal = 627.509391
b_angs = 0.52918
stats "reverse_scan_coord.dat" nooutput
e_min = STATS_min_y
plot "reverse_scan_coord.dat" u ($1 * b_angs):(($2 - e_min) * e_kcal) w lp pt 7 lw 2 lc 11 #smooth csplines
我正在使用gnuplot的Windows 5.0版补丁级别5。
我做错了吗?我对这个自动订购功能感到非常惊讶。
先谢谢您的帮助。
干杯!
答案 0 :(得分:0)
如果不反转xrange,则x值的范围从较小/较小正数到较大/较正数。 默认情况下,gnuplot连接图中的点,这些点是数据文件中的相邻数据点。 因此,在您的情况下,可以确实说出图表是从右到左绘制的,如评论中所述。
答案 1 :(得分:0)
虽然问题得到了回答并且 OP 的误解得到澄清,但让我添加一些代码来创建一个满足 OP 初步理解的绘图,即 gnuplot 会自动根据方向调整轴方向数据。
因此,严格来说,这不是答案,而是在某些(非常特殊的)情况下可能对某人有用的补充。
嗯,通常情况下,要么您事先知道数据的方向,要么您总是想用增加 (noreverse
) 或减少 (reverse
) x 值来绘制它。
代码的作用:检查第一个和最后一个数据点,如果最后一个小于第一个,则将轴方向设置为 reverse
,否则设置为 noreverse
。如果我忽略了一个简单的 gnuplot 选项,请告诉我。
代码:
### automatically set axis in same direction as data
reset session
$Data1 <<EOD
2.72121 -1326.8380227810
2.81569 -1326.8407684060
2.91018 -1326.8428301680
3.00466 -1326.8448265650
3.09915 -1326.8470902260
3.19364 -1326.8497826100
3.28812 -1326.8530603940
3.38261 -1326.8571516770
3.47710 -1326.8628214990
3.57158 -1326.8694360090
3.66607 -1326.8759488230
3.76056 -1326.8820177910
3.85504 -1326.8875129030
3.94953 -1326.8923946780
4.04401 -1326.8966652370
4.13850 -1326.9003601490
4.23299 -1326.9035228070
EOD
$Data2 <<EOD
4.23299 -1326.9035228070
4.13850 -1326.9003601490
4.04401 -1326.8966652370
3.94953 -1326.8923946780
3.85504 -1326.8875129030
3.76056 -1326.8820177910
3.66607 -1326.8759488230
3.57158 -1326.8694360090
3.47710 -1326.8628214990
3.38261 -1326.8571516770
3.28812 -1326.8530603940
3.19364 -1326.8497826100
3.09915 -1326.8470902260
3.00466 -1326.8448265650
2.91018 -1326.8428301680
2.81569 -1326.8407684060
2.72121 -1326.8380227810
EOD
DirectionCheck(data,colX) = \
sprintf('stats %s u (column(0)==0 ? x0=column(%d):x1=column(%d)) nooutput; \
if (x0>x1) { set xrange[:] reverse } \
else { set xrange[:] noreverse }',data,colX,colX)
set multiplot layout 2,1
set ytic 0.02
SetDirection = DirectionCheck('$Data1',1)
@SetDirection
plot $Data1 u 1:2 w lp pt 7 lc "red"
SetDirection = DirectionCheck('$Data2',1)
@SetDirection
plot $Data2 u 1:2 w lp pt 7 lc "blue"
unset multiplot
### end of code
结果: