如何解决Gnuplot:来自部分参数化输入的 3D 图
我正在尝试根据一些奇怪的数据绘制 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:($2*F1(x,y) + $3*F2(x,y) + $4*F3(x,y))
这在很多地方都是非常错误的,但应该最好地展示我想做的......
解决方法
如果我正确理解了您的问题,我的建议如下。 x 范围是 V
。而 T
、a
、b
和 c
来自您的数据文件。
在这种情况下,如果您将数据保存在数据块中是有利的。
如果您将其保存在文件中,请参见此处: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,$1)) with zerrorfill notitle
### end of code
结果:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。