2013-12-12 11 views
8

Ich mag die Option "explodieren" auf Matplotlib Tortendiagramme. Ich hatte gehofft, in Gruppen "explodieren" zu können. Ich plane viele kleine Scheiben, die in 3 oder 4 Kategorien fallen. Ich würde gerne alle kleinen Scheiben zusammen als Gruppen explodieren.Explode mehrere Scheiben Kuchen zusammen in Matplotlib

Ich vermute, dass nicht ganz klar ist, so habe ich meine schmerzlich vermisst Fähigkeit gefordert, grundlegende Formen zu zeichnen und machte dieses Bild zeigt, was ich versuche zu tun: das kleine

Grouped, Exploded Pie

Bitte beachten unschattierte Lücken zwischen den Gruppen.

Ist das möglich?

Vielen Dank, Alex

Antwort

8

Ich bin der direkte Weg nicht bewusst gruppiert explodierte Torten zu spezifizieren, aber es ist ganz einfach Patches zu verwenden, um eine Torte mit Gruppen neu zu zeichnen, wie

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

Dies kann zu einer Handlung führen wie
enter image description here

natürlich können Sie einfach den gewünschten theta-Winkel auf Ihren Daten statt mit den vorberechneten solchen auf Basis berechnen könnten.