我试图创建一个图形,我在一个单一的图像上覆盖多个等高线图。因此,我希望每个图都有颜色条,以及指示每个轮廓代表什么的图例。但是Matplotlib不允许我为等高线图创建单独的图例。简单的例子:
import matplotlib as mpl
import matplotlib.pyplot as plt
import cartopy
import cartopy.crs as ccrs
import numpy as np
def create_contour(i,j):
colors = ["red","green","blue"]
hatches = ['-','+','x','//','*']
fig = plt.figure()
ax = plt.axes(projection=ccrs.PlateCarree())
ax.set_extent((-15.0,15.0,-15.0,15.0))
delta = 0.25
x = np.arange(-3.0,3.0,delta)
y = np.arange(-2.0,2.0,delta)
X, Y = np.meshgrid(x, y)
data = np.full(np.shape(X), 1.0)
plot = ax.contourf(X,Y,data, levels = [float(i),float(i+1)], hatch=[hatches[j]], colors = colors[i], label="label")
plt.legend(handles=[plot], labels=["label"])
plt.savefig("figure_"+str(i)+".png")
create_contour(1,3)
当我运行此命令时,我得到以下消息:
用户警告:图例不支持(matplotlib.contour.QuadContourSet对象位于0x 7 fa 69 df 7 cac 8)示例。可以替代地使用代理艺术家。参见:http://matplotlib.org/users/legend_guide.html#creating-artists-specifically-for-adding-to-the-legend-aka-proxy-artists“aka-proxy-artists”.format(orig_handle)
但据我所知,我尽可能地遵循这些方向,唯一的区别是他们在示例中没有使用contourf。
任何帮助将不胜感激。
1条答案
按热度按时间fnvucqvd1#
对您的问题的注解看起来像是已经解决了问题(通过制作自定义补丁并将其传递到图例)。还有一个例子,我在很多年前添加到matplotlib文档中来做类似的事情(大约在同一时间,我在matplotlib中添加了轮廓阴影):https://matplotlib.org/examples/pylab_examples/contourf_hatching.html#pylab-examples-contourf-hatching
这是一个非常合理的要求,甚至在轮廓集上有一个方法可以为您提供开箱即用的图例代理:ContourSet.legend_elements.
所以你的例子可能看起来像这样: