如何在 Julia 中绘制矢量场?
How to plot a vector field in Julia?
我想在 Julia 中绘制矢量场。我找不到示例 here。
Here 有一些使用 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)
简短的回答:使用 Plots.jl 中的 quiver
。
quiver(x, y, quiver=(u, v))
在下文中,我将尝试完全重新创建您在 Matlab 中展示的示例。
首先,我们将导入 Plots
并启用 plotly
后端。
using Plots
plotly()
我们需要定义一个类似于 Matlab 的函数 meshgrid
。由于 Plots 将对我们的点数组进行操作,而不管它们的维度如何,我选择简单地使用 repeat
并使用 "flattened" 输出。
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
作为二元组传递给关键字参数 quiver
。
quiver(x, y, quiver=(u, v))
结果接近于 Matlab 输出,但 Plots.jl 似乎将箭头缩放得比 Matlab 中的更长。不过,这很容易修复;我们可以简单地将 u
和 v
乘以一个比例常数。
scale = 0.2
u = @. scale * cos(x) * y
v = @. scale * sin(x) * y
我想在 Julia 中绘制矢量场。我找不到示例 here。
Here 有一些使用 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)
简短的回答:使用 Plots.jl 中的 quiver
。
quiver(x, y, quiver=(u, v))
在下文中,我将尝试完全重新创建您在 Matlab 中展示的示例。
首先,我们将导入 Plots
并启用 plotly
后端。
using Plots
plotly()
我们需要定义一个类似于 Matlab 的函数 meshgrid
。由于 Plots 将对我们的点数组进行操作,而不管它们的维度如何,我选择简单地使用 repeat
并使用 "flattened" 输出。
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
作为二元组传递给关键字参数 quiver
。
quiver(x, y, quiver=(u, v))
结果接近于 Matlab 输出,但 Plots.jl 似乎将箭头缩放得比 Matlab 中的更长。不过,这很容易修复;我们可以简单地将 u
和 v
乘以一个比例常数。
scale = 0.2
u = @. scale * cos(x) * y
v = @. scale * sin(x) * y