2012-06-21 12 views
9

Estoy trazando una matriz de gráficos circulares, cada uno con los mismos dos colores para los mismos dos tipos de datos.matplotlib - Leyenda en subtrama separada

plt.figure(num=None, figsize=(6, 8)) 
for i in range(len(data_1)): 
    plt.subplot(sp_rows, sp_cols, i+1) 
    fracs = [data_1[i], data_2[i]] 
    plt.pie(fracs, autopct='%1.1f%%') 

pp.savefig() 

Obviamente, no tiene sentido para trazar una leyenda para cada una de estas cartas, ya que son todos iguales. Entonces, ¿hay alguna manera de trazar una sola leyenda en una subfigura separada al final?

+0

Esto parece que es un duplicado de la siguiente publicación: http://stackoverflow.com/questions/4700614/how-to-put-the-legend-out-of-the-plot – stanri

+0

No lo creo, el otro el cartel explícitamente dice que él no está hablando de subtramas. – Nils

+0

Sí, ya lo he notado. – stanri

Respuesta

16

Puede llamar leyenda() sólo una vez:

import numpy as np 
import pylab as pl 

for i in xrange(1, 5): 
    pl.subplot(220+i) 
    pl.pie([i,2], labels=["a","b"], autopct='%1.1f%%') 

l = pl.legend(title="sample") 
pl.show() 

enter image description here

o si desea que la leyenda en una nueva ejes, basta con crear un pastel ficticio, y crear leyenda para ella, y luego ocultar el pastel de maniquí:

import numpy as np 
import pylab as pl 

for i in xrange(1, 5): 
    pl.subplot(220+i) 
    pl.pie([i,2], labels=["a","b"], autopct='%1.1f%%') 

fig = pl.gcf() 
axe = fig.add_axes([0.4,0.4,0.2,0.2]) 

pie = pl.pie([1,1], labels=["a","b"]) 
l = pl.legend(title="sample", loc="center") 
for group in pie: 
    for x in group: 
     x.set_visible(False) 

pl.show() 

enter image description here

Cuestiones relacionadas