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个体积数据产生的压力)。有没有办法将输出重定向到文件?类似于plot
energy\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)