9

コレクションを使用して円のグループをプロットしていますが、3 つのカテゴリの凡例を生成できません。私が欲しい:

  • 猫 1: 赤い丸
  • 猫 2: 青い円
  • 猫 3: 黄色の円
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()

PathCollections は反復可能なオブジェクトではないため、次の方法で凡例を生成しようとしています。

legend([p, pa, pb], ["cat 1", "2 cat", "cat 3"])

動作しません。

キャプションを表示するにはどうすればよいですか?

私のシステムは Python 2.7 と Matplotlib 1.2.0_1 で動作します

このコマンドprint p.get_label()は、オブジェクトにラベルが関連付けられていることを示していますが、matplotlib は凡例をマウントできないことに注意してください。

4

1 に答える 1