Question

Je suis un peu novice dans ce domaine et j'essaie de créer un tableau de dispersion avec des tailles et des couleurs de bulle personnalisées. Le graphique s’affiche correctement, mais comment puis-je obtenir une légende indiquant à quoi les couleurs se rapportent? C’est tout ce que j’ai:

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)

Ce fil de discussion a été utile mais n'a pas permis de résoudre mon problème: Matplotlib: Légende ne s'affiche pas correctement

Était-ce utile?

La solution

Peut-être que cet exemple est utile.

En général, les éléments de la légende sont associés à une sorte d’objet tracé (tracé) . La fonction / méthode scatter traite tous les cercles comme un seul objet, voir:

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

La solution consiste donc à créer plusieurs objets. Par conséquent, en appelant scatter plusieurs fois.

Malheureusement, la nouvelle version de matplotlib ne semble pas utiliser de rectangle dans la légende. Ainsi, la légende contiendra de très grands cercles, car vous avez augmenté la taille de vos objets du diagramme de dispersion.

La légende fonctionne comme un argument de mot clé markerscale pour contrôler la taille des marqueurs de légende, mais il semble être cassé.

Mise à jour:

Le guide de légende recommande d'utiliser Artiste proxy dans des cas similaires. La API Color explique les valeurs fc valides.

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

Pour obtenir les couleurs utilisées précédemment dans un tracé, utilisez l'exemple ci-dessus tel que:

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

Cet exemple créera un graphique tel que:

Matplotlib avec légende personnalisée

Autres conseils

Jetez un coup d'œil à ceci:

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

J'espère que ça aide. Sinon, demandez simplement plus:)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top