如何在 Julia 中绘制向量场?

问题描述 投票:0回答:2

我想在 Julia 中绘制矢量场。我无法找到示例hereHere 有一些使用

plotly
的示例,但是,它们对我不起作用。我想用
plotlyjs
plotly
绘制矢量场。

这是 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)

enter image description here

plot julia plotly plotly.js
2个回答
17
投票

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

quiver

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

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

首先,我们将导入

Plots
并启用
plotly
后端。

using Plots
plotly()

我们需要定义一个类似于Matlab的函数

meshgrid
。由于绘图将在我们的点数组上进行操作,而不管其维度如何,因此我选择简单地使用
repeat
并使用“扁平化”输出。

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

现在,我们可以使用与 Matlab 代码相同的逻辑来创建

x
y
u
v
。为了简洁起见,我们可以使用
@.
宏来向量化给定表达式中的所有调用。

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

从这里,我们可以简单地使用 Plots 中的

quiver
函数,将
u
v
作为 2 元组传递给关键字参数
quiver

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

Initial plot

结果接近 Matlab 输出,但 Plots.jl 似乎将箭头缩放得比 Matlab 中的更长。不过,这个问题很容易解决;我们可以简单地将

u
v
乘以比例常数。

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

Final plot


0
投票

您可以使用 这个快速示例 来绘制一些向量场,它使用

CalculusWithJulia
包。 我认为非常简单。

但是 3D 绘图似乎不支持箭头。

© www.soinside.com 2019 - 2024. All rights reserved.