如何在Julia中绘制矢量场?

18

我想在Julia中绘制一个向量场。我在这里没有找到示例。 在这里,有一些使用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)

在此输入图片描述


(Note: This is the same content as the original, but with a more commonly used Chinese description for image alt text.)
1个回答

17

简短回答:使用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函数,在关键字参数quiver中传递uv作为2元组。

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
@MOON quiver关键字参数在此表格中被记录为系列属性。然而,看起来quiver函数本身的文档还没有到位 - Harrison Grodin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接