删除Xarray子图中的共享颜色条

5

我试图通过使用Xarrays高级绘图函数来制作共享的颜色条来调整我的子图。目前,我的图表看起来enter image description here 我想制作一个公共的颜色条并固定y轴,以便只有第一个子图的y轴具有刻度和标签。我用于绘图的代码如下:

fig, (ax1, ax2) = plt.subplots(ncols=2, sharey=True, figsize=(14,10))
Var1_monthly_clim_N.plot(ax=ax1,vmin=6, vmax=14, cmap='jet');

Var2_monthly_clim_S.plot(ax=ax2, vmin=6, vmax=14, cmap='jet', yticks=[]);
## why is yticks removing ticks from both axis
## Var1 and Var 2 have similiar dimensions
Var1
>><xarray.DataArray 'R_metric' (month: 12, lat: 1, lon: 720)>
array([[[ 9.899495,  9.942897, ...,  9.814826,  9.856807]],

   [[ 9.578215,  9.610594, ...,  9.514423,  9.546191]],

   ...,

   [[11.974784, 12.019565, ..., 11.886591, 11.930419]],

   [[10.237672, 10.285891, ..., 10.142638, 10.189836]]])
Coordinates:
* lon      (lon) float32 -180.0 -179.5 -179.0 -178.5 ... 178.5 179.0 179.5
* month    (month) int64 1 2 3 4 5 6 7 8 9 10 11 12
Dimensions without coordinates: lat

我不是最擅长python绘图的人,尝试使用这个使用imshow进行绘图的想法。

img1 = Var1.data
img2 = Var2.data 
plt.subplot(1,2,1)
plt.imshow(img1, vmin=6, vmax=14, cmap='jet', aspect='auto')
plt.subplot(1, 2, 2)
plt.imshow(img2, vmin=6, vmax=14, cmap='jet', aspect='auto')
plt.colorbar()
>>TypeError: Invalid dimensions for image data

我要如何快速使用xarray的高级绘图函数完成这个任务,也就是说,不需要将数据提取到numpy数组中并为图形创建网格等?

1个回答

23
我从未使用过xarray,所以我可能错了,但是,从文档看来,您可以在第一个plot()调用中传递add_colorbar=False来抑制其中一个颜色条的创建。
至于您的ylabel问题,您已经请求共享y轴,因此如果您从一个图形中删除标签,也会从另一个中删除它们。有趣的是,plt.subplots(..., sharey=True)应该已经设置好了,只有最左边的图形带有y标签,并且它们在其他轴中被隐藏。如果的plot()正在干扰它,那么您最好删除sharey=True并手动确保限制相同(例如,使用ax2.set_ylim(ax1.get_ylim()))。

那个很好用,谢谢。你有什么想法为什么 plt.imshow 没有起作用吗?这里,我的数据是以 Z = f(X,Y) 的形式呈现的三维数据,因为只有一个纬度,所以数组的形状是 12x1x720,也许正因为如此,函数认为数据集是四维的? - Light_B
我找到了对上面评论的答案。Xarray绘图内部调用了一个函数来压缩维度。这就是为什么plt.pcolormesh()起作用的原因。 - Light_B
仅仅像那样去除色条并不太好,因为这样图像的长宽比就会不同,或者尺寸也会不同。 - Ben Farmer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接