在plots中是否可以使用矩阵作为ms参数?


#1

大家好,我最近碰到了一个关于画图的问题。我之前用的matlab,到了Julia想问一下有没有对应的功能。
现在有 m 维向量 X 作为 横坐标, m \times n 维矩阵 Y 作为纵坐标,同时有 m \times n 维矩阵 S 储存了其他信息,我想在画散点图的同时把 S 的数值作为点的大小画在图上,但是Plots中的markersize参数貌似最多接受AbstractVector,无法直接传入整个 S 矩阵。

using Plots
m= 50
n = 14
X = 1:m
Y = reshape([i+0.01*j for i in 1:m for j in 1:n],m,n)
S = reshape([sin(j/3) for i in 1:m for j in 1:n],m,n)
fig = plot(X,Y,lw=2,size=[800,600])
for i in 1:m
    scatter!(fig, [i],Y[i,:]',ms=S[i,:]',color=:red,markerstrokewidth=0)
end
fig

为了简化问题,上面给出了一个示例代码。在上述代码中,如何不利用for循环,直接画出图像?
或者是否有其他推荐的画图库?
Julia版本:Julia 1.4.0 DEV
提前感谢各位大佬!


#2

我调了下系数,让点的大小看起来差异大一些。

using Plots

m = 50
n = 14
X = 1:m
Y = reshape([i+0.01*j for i in 1:m for j in 1:n],m,n)
S = reshape([sin(j/3)*5 for i in 1:m for j in 1:n],m,n) # 这里乘了个倍数 

fig = plot(X,Y,lw=2)

for i in 1:m
    scatter!(fig, 
        [i],
        Y[i,:]',
        ms=S[i,:]',
        color=:red,
        markerstrokewidth=0
    )
end

fig

输出长这样,你确定是你想要的?
image


整个for 循环改成这个就可以了

scatter!(fig, 
    X,
    Y,
    ms=S,
    color=:red,
    markerstrokewidth=0
)

输出不变

注:使用的是 gr 后端


#3

非常感谢您的及时解答!
这个图是我随便生成的数据,应该就是这样。用gr()后端的话,可以直接传入矩阵,但是plotly()就不行,它会读取矩阵的第一行作为大小参数,并忽略后面的数据,而且还不会报错。之前我为了使用缩放功能,一直用的plotly(),所以一直搞不懂怎么回事。