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

时间:2018-11-26 18:18:36

标签: python matplotlib plot python-xarray

我试图通过使用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绘图,因此我尝试使用this的使用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数组中并为该绘图制作meshgrid以及所有内容?

1 个答案:

答案 0 :(得分:2)

我从没使用过xarray,所以我可能是错的,但是from looking at the documentation,看来您可以在第一个add_colorbar=False调用中将plot()传递给您,以禁止创建一个的颜色栏。

对于您的ylabel问题,您已请求使用共享的y轴,因此,如果您从一个标签上删除了标签,那么也会从另一个标签上删除它们。有趣的是,plt.subplots(..., sharey=True)应该已经进行了设置,以便只有最左边的图具有y标签,并且它们隐藏在其他轴中。如果xarray的{​​{1}}搞砸了,那么最好的选择是删除plot()并确保手动限制(例如使用sharey=True)。 )