颜色条显示得很好,但是没有值。请参见下面的代码。
代码显示了2列,每列有4行Map和一行颜色条。颜色条上的标签没有出现,我不知道为什么。
import numpy as np
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
from cartopy.mpl.ticker import LatitudeFormatter, LongitudeFormatter
# for labeling lat and lon
lon_formatter = LongitudeFormatter(zero_direction_label=True)
lat_formatter = LatitudeFormatter()
# lon and lat
lon = np.linspace(-180,180,360)
lat = np.linspace(0,90,90)
# initate figure
fig, ax = plt.subplots(5,2,subplot_kw={'projection': ccrs.PlateCarree(central_longitude=180)}, \
gridspec_kw={'height_ratios': [0.33,0.33,0.33,0.33,0.05],'width_ratios': [1, 1], 'wspace': 0.1, 'hspace': 0.1},figsize=[15,10])
# mundhenk plotting
for i in range(0,4):
# create map
referenced_data = 20.0 * np.random.rand(90,360)
im1 = ax[i,0].contourf(lon,lat,referenced_data,cmap='Blues',levels=np.linspace(0,20,6),extend='max')
ax[i,0].coastlines()
ax[i,0].set_xticks([0, 60, 120, 180, 240, 300, 360], crs=ccrs.PlateCarree())
ax[i,0].set_yticks([0, 20, 40, 60, 80], crs=ccrs.PlateCarree())
if i < 3:
ax[i,0].set_xticklabels([])
ax[i,0].yaxis.set_major_formatter(lat_formatter)
else:
ax[i,0].xaxis.set_major_formatter(lon_formatter)
ax[i,0].yaxis.set_major_formatter(lat_formatter)
ax[i,0].set_ylim(20,80)
ax[i,0].set_xlim(-100,150)
# Add a colorbar for all subplots
cbar1 = plt.colorbar(im1, cax=ax[4,0], orientation='horizontal', label='(AR Day) / day')
cbar1.ax.set_aspect(0.075)
# tempestextreme plotting
for i in range(0,4):
# create map
referenced_data = 20.0 * np.random.rand(90,360)
im2 = ax[i,1].contourf(lon,lat,referenced_data,cmap='Blues',levels=np.linspace(0,20,6),extend='max')
ax[i,1].coastlines()
ax[i,1].set_xticks([0, 60, 120, 180, 240, 300, 360], crs=ccrs.PlateCarree())
ax[i,1].set_yticks([0, 20, 40, 60, 80], crs=ccrs.PlateCarree())
if i < 3:
ax[i,1].set_xticklabels([])
else:
ax[i,1].xaxis.set_major_formatter(lon_formatter)
ax[i,1].set_yticklabels([])
ax[i,1].set_ylim(20,80)
ax[i,1].set_xlim(-100,150)
cbar2 = plt.colorbar(im2,cax=ax[4,1],orientation='horizontal')
cbar2.ax.set_aspect(0.075)
2条答案
按热度按时间yrdbyhpb1#
ax[4, 0]
和ax[4, 1]
被指定为ccrs.PlateCarree
投影,这导致颜色条显示不正确。1.像使用
gridspec
一样创建子图,这样就会为颜色条分配一个位置。1.删除分配给颜色条的两个
Axes
。1.在相同的位置添加新的子图,这些子图不是投影。
1.正如RuthC所指出的,
matplotlib.pyplot.subplot_mosaic
可以用来创建每个轴的子图关键字参数。1.请注意以下方面的差异:
1.创建
Axes
对象Axes
对象是如何被引用和迭代的sycxhyv72#
接受的答案是有用的,因为它显示了两种工作方法来实现这一点,但是如果你只是让颜色条创建自己的轴,而不是试图直接将轴作为gridspec的一部分,那就更容易了。你只需在调用
colorbar
时指定ax=ax[:, 0]
即可。请注意,您还可以使用
label_outer
来摆脱标记记号的麻烦。