如何在 python 中为 cartopy 和 Matplotlib 图创建图例?
How can I create a legend for a cartopy and Matplotlib plot in python?
我正在根据该点的变量对地球上的点(经度和纬度坐标)进行分类。
我有一个数组 (360 x 720)(我的地球经纬度网格的分辨率),其中包含每个点的适当分类作为数字,
有13个类别;一个,乙,丙,...
在我的 360x 720 数组中,这些类别表示为 1、2、3、...、13。
我可以通过 cartopy 和 matplotlib 对其进行映射,但我一直在尝试制作一个图例/键来显示每个颜色映射代表的类别,我能得到的最好的是一个无用的颜色条。
ax = plt.axes(projection=ccrs.PlateCarree()) #cartopy
preplot = plt.contourf(lons, lats, Map, 17,
transform=ccrs.PlateCarree(), cmap = "tab20")
ax.coastlines() # cartopy
cb = plt.colorbar(preplot, orientation="horizontal")
plt.title("1901")
plt.show()
给出:
enter image description here
地图和颜色条
抱歉,如果这不是所有需要的信息
如果我对你的问题的理解正确,你想将所有 13 个类别的标签添加到你的颜色栏吗?在这种情况下,您应该使用以下方法在颜色栏上设置总共 13 个刻度(因为您有 13 个类别):
cb.set_ticks([i for i in range(1, 14, 1)])
现在,您应该会在颜色栏上看到总共 13 个刻度。但是,目前 ticklabels
是数字 1-13
。要更改此设置,您可以使用 cb.set_ticklabels(<list_of_strings>)
。所以,例如:
cb.set_ticklabels(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm'])
在这种情况下,您的完整代码将是:
ax = plt.axes(projection=ccrs.PlateCarree()) #cartopy
preplot = plt.contourf(lons, lats, Map, 17,
transform=ccrs.PlateCarree(), cmap = "tab20")
ax.coastlines() # cartopy
cb = plt.colorbar(preplot, orientation="horizontal")
# Update the colorbar ticks + labels
cb.set_ticks([i for i in range(1, 14, 1)])
cb.set_ticklabels(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm'])
plt.title("1901")
plt.show()
我正在根据该点的变量对地球上的点(经度和纬度坐标)进行分类。 我有一个数组 (360 x 720)(我的地球经纬度网格的分辨率),其中包含每个点的适当分类作为数字, 有13个类别;一个,乙,丙,... 在我的 360x 720 数组中,这些类别表示为 1、2、3、...、13。
我可以通过 cartopy 和 matplotlib 对其进行映射,但我一直在尝试制作一个图例/键来显示每个颜色映射代表的类别,我能得到的最好的是一个无用的颜色条。
ax = plt.axes(projection=ccrs.PlateCarree()) #cartopy
preplot = plt.contourf(lons, lats, Map, 17,
transform=ccrs.PlateCarree(), cmap = "tab20")
ax.coastlines() # cartopy
cb = plt.colorbar(preplot, orientation="horizontal")
plt.title("1901")
plt.show()
给出: enter image description here 地图和颜色条
抱歉,如果这不是所有需要的信息
如果我对你的问题的理解正确,你想将所有 13 个类别的标签添加到你的颜色栏吗?在这种情况下,您应该使用以下方法在颜色栏上设置总共 13 个刻度(因为您有 13 个类别):
cb.set_ticks([i for i in range(1, 14, 1)])
现在,您应该会在颜色栏上看到总共 13 个刻度。但是,目前 ticklabels
是数字 1-13
。要更改此设置,您可以使用 cb.set_ticklabels(<list_of_strings>)
。所以,例如:
cb.set_ticklabels(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm'])
在这种情况下,您的完整代码将是:
ax = plt.axes(projection=ccrs.PlateCarree()) #cartopy
preplot = plt.contourf(lons, lats, Map, 17,
transform=ccrs.PlateCarree(), cmap = "tab20")
ax.coastlines() # cartopy
cb = plt.colorbar(preplot, orientation="horizontal")
# Update the colorbar ticks + labels
cb.set_ticks([i for i in range(1, 14, 1)])
cb.set_ticklabels(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm'])
plt.title("1901")
plt.show()