Domanda

Sono un po 'alle prime armi in questo e sto cercando di creare un grafico a dispersione con dimensioni e colori delle bolle personalizzati. Il grafico mostra bene, ma come faccio ad avere una legenda che dice a cosa si riferiscono i colori. Questo è quanto ho:

inc = []
out = []
bal = []
col = []

fig=Figure()
ax=fig.add_subplot(111)

inc = (30000,20000,70000)
out = (80000,30000,40000)
bal = (12000,10000,6000)
col = (1,2,3)
leg = ('proj1','proj2','proj3')

ax.scatter(inc, out, s=bal, c=col)
ax.axis([0, 100000, 0, 100000])

ax.set_xlabel('income', fontsize=20)
ax.set_ylabel('Expenditure', fontsize=20)
ax.set_title('Project FInancial Positions %s' % dt)
ax.grid(True)
canvas=FigureCanvas(fig)
response=HttpResponse(content_type='image/png')
canvas.print_png(response)

Questa discussione è stata utile, ma non è riuscita a risolverlo: Matplotlib: Legend non visualizzato correttamente

È stato utile?

Soluzione

Forse questo esempio è utile. / p>

In generale, gli elementi nella legenda sono correlati con una sorta di oggetto tracciato . La funzione / metodo scatter tratta tutti i cerchi come un singolo oggetto, vedi:

print type(ax.scatter(...))

Quindi la soluzione è creare più oggetti. Quindi, chiamando scatter più volte.

Sfortunatamente, la versione più recente di matplotlib sembra non usare un rettangolo nella legenda. Quindi la legenda conterrà cerchi molto grandi, poiché hai aumentato le dimensioni degli oggetti del grafico a dispersione.

La legenda funziona come argomento della parola chiave markerscale per controllare la dimensione dei marker della legenda, ma sembra essere rotta.

Aggiornamento:

La Guida alla legenda consiglia di utilizzare Proxy Artist in casi simili. L ' API colore spiega i valori validi fc .

p1 = Rectangle((0, 0), 1, 1, fc="b")
p2 = Rectangle((0, 0), 1, 1, fc="g")
p3 = Rectangle((0, 0), 1, 1, fc="r")
legend((p1, p2, p3), ('proj1','proj2','proj3'))

Per ottenere i colori utilizzati in precedenza in un grafico, utilizzare l'esempio sopra come:

pl1, = plot(x1, y1, '.', alpha=0.1, label='plot1')
pl2, = plot(x2, y2, '.', alpha=0.1, label='plot2')
p1 = Rectangle((0, 0), 1, 1, fc=pl1.get_color())
p2 = Rectangle((0, 0), 1, 1, fc=pl2.get_color())
legend((p1, p2), (pl1.get_label(), pl2.get_label()), loc='best')

Questo esempio farà una trama come:

Matplotlib con legenda personalizzata

Altri suggerimenti

Dai un'occhiata a questo:

http://matplotlib.sourceforge.net/api/pyplot_api .html # matplotlib.pyplot.legend

Spero che sia d'aiuto. Se non basta, basta chiedere di più :)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top