如何在 Julia 中绘制向量场?

Posted

技术标签:

【中文标题】如何在 Julia 中绘制向量场?【英文标题】:How to plot a vector field in Julia? 【发布时间】:2018-12-30 04:22:27 【问题描述】:

我想在 Julia 中绘制一个向量场。我找不到示例 here。 Here 有一些使用plotly 的示例,但是,它们对我不起作用。我想通过plotlyjsplotly 绘制矢量场。

这是 Julia 中的示例代码:

using Plots
pyplot()
x = collect(linspace(0,10,100));
X = repmat(x,1,length(x));
Y = repmat(x',length(x),1);
U = cos.(X.*Y);
V = sin.(X.*Y);
streamplot(X,Y,U,V)

这是 Matlab 示例:

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

figure
quiver(x,y,u,v)

【问题讨论】:

【参考方案1】:

简短的回答:使用 Plots.jl 中的 quiver

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

在下文中,我将尝试完全重新创建您在 Matlab 中显示的示例。

首先,我们将导入 Plots 并启用 plotly 后端。

using Plots
plotly()

我们需要定义一个类似于 Matlab 的meshgrid 的函数。由于 Plots 将对我们的点数组进行操作,而不管它们的维度如何,我选择简单地使用 repeat 并使用“扁平化”输出。

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

现在,我们可以使用与 Matlab 代码相同的逻辑创建 xyuv。为简洁起见,我们可以使用@. 宏来向量化给定表达式中的所有调用。

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

从这里,我们可以简单地使用 Plots 中的 quiver 函数,将 uv 作为 2 元组传递给关键字参数 quiver

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

结果接近于 Matlab 输出,但似乎 Plots.jl 将箭头缩放为比它们在 Matlab 中的更长。不过,这很容易解决;我们可以简单地将 uv 广播乘以一个比例常数。

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

【讨论】:

谢谢! Plots.jl的文档是否有任何链接,其中解释了quiver @MOON quiver 关键字参数在this table 中记录为系列属性。但是,它看起来像 isn't there yet 函数本身的文档 quiver

以上是关于如何在 Julia 中绘制向量场?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Quiver Plot 在向量场中显示速度大小?

如何在 Julia 语言中绘制圆形扇区?

如何在Julia中绘制热图

matlab如何画三维向量场

MATLAB可视化实战系列(二十四)-三维可视化如何利用圆锥图显示向量场?

如何在 Julia 中将数组转换为数组?