使用Plots.jl中的pyplot.如何使多个子图只有一个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在新轴中创建了一个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("函数"对象没有属性"autoscale_None")

这让我觉得p.o:axis[:contourf]不是召唤我想要的东西的方法。

有人能帮忙吗?感谢

通常,如果您想在PyPlot对象上使用代码,最好只使用PyPlot,而忽略Plots。这种混合物在实践中很少奏效。如果你确实想使用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进行调整,以使它们具有相同的宽度。

相关内容

最新更新