如何绘制矢量场,其中每个点(x,y)的方向由tangent(alpha) = f(x, y)
给出?
答案 0 :(得分: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中绘制了一个矢量场的示例。
答案 1 :(得分: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