2013-12-12 14 views
8

Mi piace molto l'opzione "esplodi" nei grafici a torta matplotlib. Speravo di essere in grado di "esplodere in gruppi". Sto tracciando tante piccole fette che cadono in 3 o 4 categorie. Mi piacerebbe esplodere tutte le piccole fette insieme, come gruppi.Esplodi più fette di torta insieme in matplotlib

Ho capito che non è del tutto chiaro, così ho chiamato la mia capacità gravemente carente di disegnare forme di base e ho fatto questa immagine che mostra quello che sto cercando di fare:

Grouped, Exploded Pie

Si prega di notare il piccolo spazi vuoti non ombreggiati tra i gruppi.

È possibile?

Grazie mille, Alex

risposta

8

Io non sono a conoscenza di alcun modo diretto per specificare torte esplosi raggruppati, ma è abbastanza semplice da usare patch di ridisegnare una torta con gruppi come

# original part (left) 
import numpy as np 
import matplotlib.pyplot as plt 
f,ax = plt.subplots(1,2) 
ax[0].set_aspect('equal') 
data=np.abs(np.random.randn(7)) 
wedges, texts = ax[0].pie(data) 

# redraw plot using patches (right) 
import matplotlib.patches as mpatches 
from matplotlib.collections import PatchCollection 
ax[1].set_aspect('equal') 
ax[1].axis('off') 

groups=[[0,1,2],[3,4],[5,6]] 
radfraction = 0.1 
patches = [] 
for i in groups: 
    ang = np.deg2rad((wedges[i[-1]].theta2 + wedges[i[0]].theta1)/2,) 
    for j in i: 
    we = wedges[j] 
    center = (radfraction*we.r*np.cos(ang), radfraction*we.r*np.sin(ang)) 
    patches.append(mpatches.Wedge(center, we.r, we.theta1, we.theta2)) 

colors = np.linspace(0, 1, len(patches)) 
collection = PatchCollection(patches, cmap=plt.cm.hsv) 
collection.set_array(np.array(colors)) 
ax[1].add_collection(collection) 
ax[1].autoscale(True) 

Questo può comportare una trama come
enter image description here

Naturalmente, si può semplicemente calcolare i theta-angoli necessari, sulla base di dati invece di usare quelli precalcolate.

Problemi correlati