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

War es hilfreich?

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:

Matplotlib mit benutzerdefinierter Legende

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:)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top