2013-12-12 91 views
8

我真的很喜歡matplotlib餅圖上的「explode」選項。我希望能夠「分組爆炸」。我正在繪製大量小片,分爲3或4個類別。我想把所有的小片一起炸開,就像團體一樣。在matplotlib中分割多個餅餡餅

我想這是不完全清楚,所以我在我最缺繪製基本形狀能力調用,使這個畫面呈現我想要做的事:

Grouped, Exploded Pie

請注意一點組間沒有陰影的差距。

這可能嗎?

非常感謝,亞歷克斯

回答

8

我不知道的指定分組爆炸餡餅任何直接的方式,但它是相當簡單,使用補丁重繪與三個等級的圓形像

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

這可能會導致一個情節像
enter image description here

當然,你可以簡單地計算基於您的數據,而不是使用預先計算的人所需要的θ-角度。