How to plot a vector field in Julia?

后端 未结 1 1879
予麋鹿
予麋鹿 2021-02-13 19:03

I want to plot a vector field in Julia. I could not find an example here. Here there are some examples using plotly, however, they do not work for me. I would like

1条回答
  •  闹比i
    闹比i (楼主)
    2021-02-13 19:55

    The short answer: use quiver from Plots.jl.

    quiver(x, y, quiver=(u, v))
    

    In the following, I'll attempt to fully recreate the example you showed in Matlab.

    First, we'll import Plots and enable the plotly backend.

    using Plots
    plotly()
    

    We need to define a function similar to Matlab's meshgrid. Since Plots will operate on our arrays of points regardless of their dimensionality, I chose to simply use repeat and use the "flattened" outputs.

     meshgrid(x, y) = (repeat(x, outer=length(y)), repeat(y, inner=length(x)))
    

    Now, we can create x, y, u, and v using the same logic as the Matlab code. For the sake of brevity, we can use the @. macro to vectorize all calls in the given expression.

    x, y = meshgrid(0:0.2:2, 0:0.2:2)
    u = @. cos(x) * y
    v = @. sin(x) * y
    

    From here, we can simply use the quiver function from Plots, passing u and v as a 2-tuple to the keyword argument quiver.

    quiver(x, y, quiver=(u, v))
    

    The result is close to the Matlab output, but it seems that Plots.jl scales the arrows to be longer than they are in Matlab. This is easily fixable, though; we can simply broadcast-multiply u and v by a scale constant.

    scale = 0.2
    u = @. scale * cos(x) * y
    v = @. scale * sin(x) * y
    

    0 讨论(0)
提交回复
热议问题