Matplotlib Legend für Scatter mit benutzerdefinierten Farben
-
07-07-2019 - |
Frage
Ich bin ein bisschen Neuling in dieser und ich versuche, ein Streudiagramm mit benutzerdefinierten Blasengrößen und Farben zu erzeugen. Die Grafik zeigt in Ordnung, aber wie kann ich eine Legende erhalten zu sagen, was die Farben beziehen. Dies ist so weit ich habe:
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)
Dieser Thread war hilfreich, konnte aber nicht bekommen es mein Problem zu lösen: Matplotlib: Legend nicht richtig angezeigt
Lösung
Vielleicht Beispiel ist hilfreich.
Im allgemeinen sind die Elemente in der Legende sind mit irgendeiner Art im Zusammenhang von aufgetragen Objekt . Die scatter
Funktion / Methode behandelt alle Kreise als ein einzelnes Objekt finden Sie unter:
print type(ax.scatter(...))
So ist die Lösung, mehrere Objekte zu erstellen. Daher ruft scatter
mehrere Male.
Leider neuere Version von matplotlib scheint nicht ein Rechteck in der Legende zu verwenden. So ist die Legende wird sehr große Kreise enthalten, da Sie die Größe Ihrer Streudiagramm Objekte erhöht.
Die Legende Funktion als markerscale
Schlüsselwort-Argument der Größe der Legende Markers zu kontrollieren, aber es scheint, um gebrochen zu werden.
Update:
Die Legend Führung mit empfiehlt Proxy Künstler in ähnlichen Fällen. Die Farbe API gültig fc
Werte erklärt.
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'))
die Farben vorher in einem Plan verwendet zu erhalten, verwenden Sie das obige Beispiel wie:
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')
In diesem Beispiel wird macht eine grafische Darstellung wie:
Andere Tipps
Haben Sie einen Blick in diese:
http://matplotlib.sourceforge.net/api/pyplot_api .html # matplotlib.pyplot.legend
Ich hoffe, das hilft. Wenn nicht nur für mehr fragen:)