繁体   English   中英

使用Plots.jl中的pyplot。 如何使几个子图只有一个疣鼻?

[英]Using pyplot from Plots.jl. How to make several subplots have only one colobar?

我正在使用Plots.jl在同一图中绘制多个图。 使用pyplot后端时,每个图都有其自己的颜色条,我不希望这样做,因为它们具有相同的数据。 我正在尝试从这个问题中复制答案,但是我不了解Plots.jl API下的机制的详细信息,因此我无法复制它。 我的情节是这样完成的:

using Plots;pyplot()
p1 = plot(a,st=:contour,fill=true)
p2 = plot(b,st=:contour,fill=true)
p  = plot(p1,p2)

并且,链接的答案(在python中)是这样的:

fig, axes = plt.subplots(nrows=2, ncols=2)
for ax in axes.flat:
    im = ax.imshow(np.random.random((10,10)), vmin=0, vmax=1)

fig.subplots_adjust(right=0.8)
cbar_ax = fig.add_axes([0.85, 0.15, 0.05, 0.7])
fig.colorbar(im, cax=cbar_ax)

plt.show()

据我了解,for中的代码实际上是在由plt.subplots创建的轴上绘制图(在我的情况下,这是由Plots.jl完成的。下一行使图更接近,然后是图fig.add_axes为colorbar创建一个新轴,最后,fig.colorbar这行在new axis中创建一个colorbar,并使用for循环中最后一个图的数据。

我当前的代码是:

cbar_ax = p.o[:add_axes]([0.85, 0.15, 0.05, 0.7]);
p.o[:colorbar](p.o[:axes][1][:contourf],cax=cbar_ax)
display(p)

而且它不起作用(我不希望它起作用,因为我不知道自己在做什么。

我得到的错误是:

AttributeError(“'function'对象没有属性'autoscale_None'”)

这让我觉得po :axes [:contourf]并不是召唤我要尝试的方法。

有人可以帮忙吗? 谢谢

通常,如果要在PyPlot对象上使用代码,最好只使用PyPlot而忽略Plots。 这种混合在实践中很少起作用。 如果您确实想使用绘图,则应该可以

using Plots;pyplot()
lims = extrema([a;b])
p1 = plot(a,st=:contour,fill=true, colorbar = false)
p2 = plot(b,st=:contour,fill=true, colorbar = true, clims = lims)
p  = plot(p1,p2)

一个子图将比另一个子图宽得多-您可能需要使用@layout进行调整,以使其具有相同的宽度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM