Gnuplot:来自部分参数化输入的 3D 图

Gnuplot: 3D plot from partially parametrized input

我正在尝试根据有些奇怪的数据绘制 3D 图。假设您有一个函数 F(T,V) = a*T + b*V + c*V**2,但这些参数实际上会随着每个 T 而改变。所以我的数据文件看起来像这样:

#T a b c
0 a1 b1 c1
1 a2 b2 c2
2 a3 b3 c3
...

(所以,本质上,我的函数在温度 T 和体积 V 中进行了参数化。但是对于每个 T 参数化发生变化)

我想做的是绘制这些数据,例如,但不一定,在像 this.

这样的栅栏图中

我最好的尝试是

F1(T,V) = T
F2(T,V) = V
F3(T,V) = V**2

set yrange [3:4]

splot infile u 1:y:(*F1(x,y) + *F2(x,y) + *F3(x,y))

这在很多地方都错得离谱,但应该能最好地展示我想做的事情...

如果我正确理解了你的问题,我的建议如下。 x-range 是 VTabc 取自您的数据文件。 在这种情况下,将数据放在数据块中是有利的。 如果您将其保存在文件中,请参阅此处:gnuplot: load datafile 1:1 into datablock

根据您的数据循环,您的数据线向前或向后(此处为反向:for [i=|$Data|:1:-1]),因为没有完全覆盖其他曲线。请注意,数据块中没有标题行,否则您将不得不从 [i=|$Data|:2:-1] 开始循环。检查以下最小示例以进一步调整...

代码:

### parametric plot with zerrorfill
reset session

#T    a    b     c
$Data <<EOD
 0  1.1  2.1  0.1
 1  1.2  2.2  0.2
 2  1.3  2.3  0.3
 3  1.4  2.4  0.4
 4  1.5  2.5  0.5
 5  1.6  2.6  0.6
EOD

T(i) = real(word($Data[i],1))
a(i) = real(word($Data[i],2))
b(i) = real(word($Data[i],3))
c(i) = real(word($Data[i],4))
F(i,V) = a(i)*T(i) + b(i)*V + c(i)*V**2

set xyplane relative 0
set xrange [0:20]

splot for [i=|$Data|:1:-1] '+' u 1:(T(i)):(0):(0):(F(i,)) with zerrorfill notitle
### end of code

结果: