2013-12-12 5 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

のようなプロットをもたらすことができます。

関連する問題