首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >matplotlib中使用PathCollections的图例

matplotlib中使用PathCollections的图例
EN

Stack Overflow用户
提问于 2013-05-17 09:11:18
回答 1查看 9.1K关注 0票数 9

我正在绘制使用集合的圆圈组,我无法生成这三个类别的图例。我要:

  • Cat 1:红色圆圈
  • Cat 2:蓝色圆圈
  • Cat 3:黄色圆圈

代码语言:javascript
运行
AI代码解释
复制
import matplotlib
import matplotlib.pyplot as plt
from matplotlib.collections import PatchCollection
from matplotlib.patches import Circle
import numpy as np

# (modified from one of the matplotlib gallery examples)
resolution = 50 # the number of vertices
N = 50
Na = 25
Nb = 10
x        = np.random.random(N)
y       = np.random.random(N)
radii   = 0.1*np.random.random(30)

xa       = np.random.random(Na)
ya       = np.random.random(Na)
radiia   = 0.1*np.random.random(50)


xb       = np.random.random(Nb)
yb       = np.random.random(Nb)
radiib   = 0.1*np.random.random(60)

patches = []
patchesa = []
patchesb = []
for x1,y1,r in zip(x, y, radii):
     circle = Circle((x1,y1), r)
     patches.append(circle)

for x1,y1,r in zip(xa, ya, radiia):
    circle = Circle((x1,y1), r)
    patchesa.append(circle)

for x1,y1,r in zip(xb, yb, radiib):
    circle = Circle((x1,y1), r)
    patchesb.append(circle)


fig = plt.figure()
ax = fig.add_subplot(111)

colors = 100*np.random.random(N)
p = PatchCollection(patches, cmap=matplotlib.cm.jet, alpha=0.4, label= "Cat 1", facecolor="red")
pa = PatchCollection(patchesa, cmap=matplotlib.cm.jet, alpha=0.3, label= "Cat 2", facecolor="blue")
pb = PatchCollection(patchesb, cmap=matplotlib.cm.jet, alpha=0.4, label= "Cat 3", facecolor="yellow")
#p.set_array(colors)
ax.add_collection(p)
ax.add_collection(pa)
ax.add_collection(pb)
ax.legend(loc = 2)
plt.colorbar(p)

print p.get_label()

plt.show()

PathCollection不是可迭代的对象,因此试图以下列方式生成图例;

代码语言:javascript
运行
AI代码解释
复制
legend([p, pa, pb], ["cat 1", "2 cat", "cat 3"])

不管用。

标题怎么会出现?

我的系统运行在Python2.7和Matplotlib 1.2.0_1上

注意,命令print p.get_label()显示对象有一个关联的标签,但是matplotlib无法挂载图例。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-18 04:19:46

一个可能的解决方案是添加要在图例中使用的Line2D对象,也称为使用代理艺术家。要实现这一点,必须将from matplotlib.lines import Line2D添加到脚本中,然后可以替换以下代码:

代码语言:javascript
运行
AI代码解释
复制
ax.legend(loc = 2)
plt.colorbar(p)

print p.get_label()

在这方面:

代码语言:javascript
运行
AI代码解释
复制
circ1 = Line2D([0], [0], linestyle="none", marker="o", alpha=0.4, markersize=10, markerfacecolor="red")
circ2 = Line2D([0], [0], linestyle="none", marker="o", alpha=0.3, markersize=10, markerfacecolor="blue")
circ3 = Line2D([0], [0], linestyle="none", marker="o", alpha=0.4, markersize=10, markerfacecolor="yellow")

plt.legend((circ1, circ2, circ3), ("Cat 1", "Cat 2", "Cat 3"), numpoints=1, loc="best")

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16614558

复制
相关文章

相似问题

领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文