Python Gnuplot:使用函数转换数据文件的一列,并绘制转换后的数据和函数
我有一个文件名为:Python Gnuplot:使用函数转换数据文件的一列,并绘制转换后的数据和函数,python,arrays,function,gnuplot,calculated-columns,Python,Arrays,Function,Gnuplot,Calculated Columns,我有一个文件名为:energy\u vs\u volume.dat,如下所示: # Volume Energy 123.598570 -1.883015140352E+03 124.960411 -1.883015431207E+03 126.122583 -1.883015514359E+03 126.332431 -1.883015514750E+03 E0=-1883.01544309 B0=32.13 V0=126.4025 B0_pr
energy\u vs\u volume.dat
,如下所示:
# Volume Energy
123.598570 -1.883015140352E+03
124.960411 -1.883015431207E+03
126.122583 -1.883015514359E+03
126.332431 -1.883015514750E+03
E0=-1883.01544309
B0=32.13
V0=126.4025
B0_prime=-0.95
f0=(3.0/2.0)*B0
f1(x)=((V0/x)**(7.0/3.0))-((V0/x)**(5.0/3.0))
f2(x)=((V0/x)**(2.0/3.0))-1
P(x)= f0*f1(x)*(1+(3.0/4.0)*(B0_prime-4)*f2(x))
plot "energy_vs_volume.dat" using (P(x)):2 with line lt -1 lw 3
我的功能是将能量
转换为压力
,如下所示:
# Volume Energy
123.598570 -1.883015140352E+03
124.960411 -1.883015431207E+03
126.122583 -1.883015514359E+03
126.332431 -1.883015514750E+03
E0=-1883.01544309
B0=32.13
V0=126.4025
B0_prime=-0.95
f0=(3.0/2.0)*B0
f1(x)=((V0/x)**(7.0/3.0))-((V0/x)**(5.0/3.0))
f2(x)=((V0/x)**(2.0/3.0))-1
P(x)= f0*f1(x)*(1+(3.0/4.0)*(B0_prime-4)*f2(x))
plot "energy_vs_volume.dat" using (P(x)):2 with line lt -1 lw 3
我想在同一个图中绘制:
目标#1:函数p(x)
目标#2:文件能量与体积.dat
中能量的所有4行离散数据,使用函数将其转换为压力,并将这4个点绘制为y轴:压力
<代码>x轴:卷
到目前为止,我已经做到了:
set encoding utf8
set termoption enhanced
E0=-1883.01544309
B0=32.13
V0=126.4025
B0_prime=-0.95
f0=(3.0/2.0)*B0
f1(x)=((V0/x)**(7.0/3.0))-((V0/x)**(5.0/3.0))
f2(x)=((V0/x)**(2.0/3.0))-1
P_Birch_Murnaghan(x)= f0*f1(x)*(1+(3.0/4.0)*(B0_prime-4)*f2(x))
set xrange [123:138]
plot P_Birch_Murnaghan(x) with line lt -1 lw 3
这将打印p(x)
->目标1的连续函数
为了实现目标2,我在脚本中添加了以下内容:
# Volume Energy
123.598570 -1.883015140352E+03
124.960411 -1.883015431207E+03
126.122583 -1.883015514359E+03
126.332431 -1.883015514750E+03
E0=-1883.01544309
B0=32.13
V0=126.4025
B0_prime=-0.95
f0=(3.0/2.0)*B0
f1(x)=((V0/x)**(7.0/3.0))-((V0/x)**(5.0/3.0))
f2(x)=((V0/x)**(2.0/3.0))-1
P(x)= f0*f1(x)*(1+(3.0/4.0)*(B0_prime-4)*f2(x))
plot "energy_vs_volume.dat" using (P(x)):2 with line lt -1 lw 3
或类似于$
,但它不起作用
如果你能帮助我,我将不胜感激
编辑:
我需要知道转换的准确值(4个体积数据产生的压力)。有没有办法将输出重定向到文件?类似于plotenergy\u vs\u volume.dat“使用1:(P($1))>file.txt
?使用
plot "energy_vs_volume.dat" using 1:(P($1))
将函数p(x)
应用于数据。要将计算值写入文件,请将绘图命令包装在set/unset table
对中:
plot "energy_vs_volume.dat" using 1:(P($1))
set table "output.dat"
replot
unset table
生成的文件包含三列,值由
using
语句给出,第三列是一个字符,用于指示值是在范围内(i
)、超出范围(o
)还是未定义(u
).@Christoph不…它也不起作用…对不起,我误读了描述。请看我的回答是的,但只有一件事:它应该是:使用1:(p($1))绘制“能量与体积.dat”…好吗?干得好!但是,还有一件事我忘了在主要问题(现已编辑)中问:我需要知道转换的确切值(4个卷的数据产生的压力)。有没有办法将输出重定向到文件?类似于使用1:(P($1))>file.txt来绘制“energy\u vs\u volume.dat”的想法?(我真的很抱歉,现在我不能给你一个+1,因为我的声誉不到15)