使用gnuplot的传染媒介领域

问题描述 投票:12回答:2

如何绘制矢量场,其中每个点(x,y)的方向由tangent(alpha) = f(x, y)给出?

gnuplot
2个回答
19
投票

据我所知,gnuplot只能在从文件中读取数据时绘制矢量字段。您的文件必须有4列,x,y,deltax和delta y,然后gnuplot将为文件中的每一行绘制从(x,y)到(x + deltax,y + deltay)的向量:

plot "file.dat" using 1:2:3:4 with vectors head filled lt 2

如果您不坚持使用gnuplot,还有其他工具可以更好或更轻松。我个人使用asymptote。在渐近线here中绘制了一个矢量场的示例。


12
投票

看起来这个问题/答案有点陈旧,因为我认为gnuplot在最新版本中有所改变,可能应该更新答案。

我在这里找到了一个很好的紧凑解决方案:http://gnuplot.10905.n7.nabble.com/Vector-Fields-td3627.html

我将为方便起见报告:

set xrange [-5:5]
set yrange [-5:5]
# only integer x-cordinates
set samples 11
# only integer y-cordinates
set isosamples 11
# we need data, so we use the special filename "++", which
# produces x,y-pairs
plot "++" using 1:2:1:(2.*$2) with vectors

在这里,最初的问题是如何绘制矢量场F(x,y) = <x, 2y>。诀窍在图“++”中,这是一个特殊的文件名,允许使用using说明符中的函数。

因此,正如@Jan在他的回答中所说,gnuplot需要数据文件中的4个字段来绘制矢量字段,但这里的字段是合成的,并且使用两个函数生成。

使用定义函数的等效公式可以是:

set xrange [-5:5]
set yrange [-5:5]
dx(x) = x
dy(x) = 2*x
plot "++" using 1:2:(dx($1)):(dy($2)) w vec

有关详细信息,请参阅help special-filenames

HIH

© www.soinside.com 2019 - 2024. All rights reserved.