Pergunta

Eu sou um pouco de novato para isso e estou tentando criar um gráfico de dispersão com tamanhos e cores de bolha personalizado. O gráfico exibe bem, mas como faço para obter uma lenda dizendo que as cores se referem. Isto é, tanto quanto eu tenho:

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)

Esta discussão foi útil, mas não poderia obtê-lo para resolver o meu problema: Matplotlib: Legend não exibido corretamente

Foi útil?

Solução

Talvez este exemplo é útil.

Em geral, os itens na legenda estão relacionadas com algum tipo de objeto plotados . A função scatter / método trata todos os círculos como um único objeto, veja:

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

Assim, a solução é criar vários objetos. Assim, chamando scatter várias vezes.

Infelizmente, a versão mais recente do matplotlib parecem não usar um retângulo na legenda. Assim, a legenda irá conter muito grandes círculos, já que aumentou o tamanho de seus objetos de dispersão.

A função lenda como um argumento markerscale palavra-chave para controlar o tamanho dos marcadores lenda, mas parece estar quebrado.

Update:

O guia Legend recomenda o uso de Proxy artista em casos semelhantes. A API Cor explica valores fc válidos.

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

Para obter as cores usadas anteriormente em lote, use o exemplo acima como:

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

Este exemplo vai fazer uma trama como:

Matplotlib com a lenda do costume

Outras dicas

Tenha um olhar para isto:

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

Espero que ajude. Se não apenas pedir mais:)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top