MOO*_*OON 9 plot julia plotly plotly.js
我想在Julia中绘制一个矢量场.我在这里找不到一个例子.
这里有一些例子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)
Run Code Online (Sandbox Code Playgroud)
这是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)
Run Code Online (Sandbox Code Playgroud)
简短的答案:使用quiverPlots.jl。
quiver(x, y, quiver=(u, v))
Run Code Online (Sandbox Code Playgroud)
在下文中,我将尝试完全重新创建您在Matlab中显示的示例。
首先,我们将导入Plots并启用plotly后端。
using Plots
plotly()
Run Code Online (Sandbox Code Playgroud)
我们需要定义类似于Matlab的函数meshgrid。由于绘图将对我们的点阵列进行操作而无论其尺寸如何,因此我选择仅使用repeat并使用“展平”的输出。
meshgrid(x, y) = (repeat(x, outer=length(y)), repeat(y, inner=length(x)))
Run Code Online (Sandbox Code Playgroud)
现在,我们可以创建x,y,u,并v使用相同的逻辑Matlab代码。为了简洁起见,我们可以使用@.宏将给定表达式中的所有调用向量化。
x, y = meshgrid(0:0.2:2, 0:0.2:2)
u = @. cos(x) * y
v = @. sin(x) * y
Run Code Online (Sandbox Code Playgroud)
从这里,我们可以简单地使用quiver功能的地块,经过u和v一个2元组关键字参数quiver。
quiver(x, y, quiver=(u, v))
Run Code Online (Sandbox Code Playgroud)
结果接近于Matlab输出,但似乎Plots.jl缩放了箭头,使其比Matlab中的箭头更长。不过,这很容易解决。我们可以简单地广播乘u和v由规模不变。
scale = 0.2
u = @. scale * cos(x) * y
v = @. scale * sin(x) * y
Run Code Online (Sandbox Code Playgroud)