2013-12-12 24 views
8

içinde birden fazla turta dilimini birlikte patlatırım. "Grup halinde patlayabilir" olmayı umuyordum. 3 veya 4 kategoriye giren çok sayıda küçük dilim çiziyorum. Bütün küçük dilimleri birlikte gruplar halinde patlatmak isterim. Matplotlib pasta grafiğinde "patla" seçeneğini gerçekten beğendim matplotlib

Bunu tamamen açık değil rakam, bu yüzden temel şekiller çizmek benim şiddetle eksik yeteneği çağırdı ve bu resim ben yapmaya çalışıyorum ettiğini gösteren yaptı:

Grouped, Exploded Pie

küçük unutmayın gruplar arasında gölgelenmemiş boşluklar.

Bu mümkün mü?

Çok teşekkürler

Alex

cevap

8

Ben gruplandırılmış patladı turta belirtmek için herhangi bir doğrudan yol farkında değilim ama gibi gruplarla bir pasta yeniden çizmek için yamalar kullanımı oldukça basittir

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

Bu tabii ki, sadece yerine precomputed olanları kullanmak için verilere dayalı gerekli teta-açıları hesaplamak olabilir
enter image description here

gibi bir arsa ile sonuçlanabilir.