Vector field using gnuplot

后端 未结 2 1825
轻奢々
轻奢々 2021-02-13 13:47

How do I plot a vector field, where the direction at each point (x, y) is given by tangent(alpha) = f(x, y)?

2条回答
  •  孤街浪徒
    2021-02-13 14:23

    It seems this question/answer is a bit old, and since I believe that gnuplot is changed a bit in the latest versions, probably the answer should be updated.

    I found a nice and compact solution here, by thse: http://gnuplot.10905.n7.nabble.com/Vector-Fields-td3627.html

    which I will report for convenience:

    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
    

    Here, the original question was how to plot the vector field F(x,y) = . The trick is in the plot "++", which is a special file name which allows to use functions in the using specifier.

    So, as @Jan said in his answer, gnuplot needs 4 fields in the data file to plot a vector field, but here the fields are synthetic and produced with two functions.

    An equivalent formulation using defined functions could be:

    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
    

    See help special-filenames for further details.

    HIH

提交回复
热议问题