как добавить легенду для scatter ()? - PullRequest
0 голосов
/ 05 ноября 2011

Эти опции не работают ...

import numpy as np
import matplotlib.pyplot as plt

arr = np.random.random((5,3))

ax = plt.axes()
ax.scatter(arr[:,0],arr[:,1],c=['k','r','g','r','b'])
plt.legend(loc='upper left')
plt.draw()

ax = plt.axes()
h = ax.scatter(arr[:,0],arr[:,1],c=['k','r','g','r','b'])
plt.legend(h, loc='upper left')
plt.draw()

Я могу вместо этого использовать сборку и написать цикл,

colors = ['k','r','g','r','b']
ax = plt.axes()
h = []
for i,c in enumerate(colors):
    h.append(ax.plot(arr[i,0],arr[i,1],c+'o'))
plt.legend(colors) ## plt.legend(h,colors) does not work
plt.draw()

Когда я передаю h в legend это говорит

  warnings.warn("Legend does not support %s\nUse proxy artist instead.\n\nhttp://matplotlib.sourceforge.net/users/legend_guide.html#using-proxy-artist\n" % (str(orig_handle),))

Но как мне заставить это работать с разбросом без написания цикла?

1 Ответ

1 голос
/ 05 ноября 2011

Похоже, вы пытаетесь заполнить легенду фактическим точечным графиком или, по крайней мере, ссылаться на то, что происходит на точечном графике.Чтобы создать легенду, вы должны нарисовать ее как отдельную сущность - это означает, что формы и цвета точки разброса необходимо воссоздать, например, как вспомогательный участок.Это немного более ручной подход, но он должен работать:

colors = ['k','r','g','r','b']
ax = plt.axes()
ax.scatter(arr[:,0],arr[:,1],c=['k','r','g','r','b'])
line1 = plt.Line2D(range(10), range(10), marker='o', color=colors[0])
line2 = plt.Line2D(range(10), range(10), marker='o',color=colors[1])
line3 = plt.Line2D(range(10), range(10), marker='o',color=colors[2])
line4 = plt.Line2D(range(10), range(10), marker='o',color=colors[3])
line5 = plt.Line2D(range(10), range(10), marker='o',color=colors[4])
plt.legend((line1,line2,line3, line4, line5),('color1','color2', 'color3', 'color4', 'color5'),numpoints=1, loc=1)
plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...