2010-09-28 31 views
2

Comment un graphique à secteurs peut-il être dessiné avec Matplotlib avec un premier coin commençant à midi (c'est-à-dire en haut du graphique)? La valeur par défaut est pyplot.pie() pour placer le premier bord à trois heures, et ce serait bien de pouvoir le personnaliser.Comment tracer un graphique circulaire avec le premier coin en haut, en Python? [matplotlib]

+1

[http://stackoverflow.com/questions/9220933/plotting-a-pie-chart-in-matplotlib-at-a-specific-angle-with-the-fracs-on-the -wed] [1] [1]: http://stackoverflow.com/questions/9220933/plotting-a-pie-chart-in-matplotlib-at-a-specific-angle-with- les-fracs-on-the-wed –

Répondre

1

Tout simplement parce que cela est venu dans une recherche Google pour moi, je vais ajouter que pendant ce temps, matplotlib l'a inclus comme argument supplémentaire à la fonction pie.

Maintenant, on peut appeler plt.pie(data, start_angle=90) pour que le premier coin démarre à midi.

PyPlot documentation on this

5

Il est un peu un hack, mais vous pouvez faire quelque chose comme ça ...

import matplotlib.pyplot as plt 
from matplotlib.transforms import Affine2D 
import numpy as np 

x = [5, 20, 10, 10] 
labels=['cliffs', 'frogs', 'stumps', 'old men on tractors'] 

plt.figure() 
plt.suptitle("Things I narrowly missed while learning to drive") 
wedges, labels = plt.pie(x, labels=labels) 
plt.axis('equal') 

starting_angle = 90 
rotation = Affine2D().rotate(np.radians(starting_angle)) 

for wedge, label in zip(wedges, labels): 
    label.set_position(rotation.transform(label.get_position())) 
    if label._x > 0: 
     label.set_horizontalalignment('left') 
    else: 
     label.set_horizontalalignment('right') 

    wedge._path = wedge._path.transformed(rotation) 

plt.show() 

Example Pie Plot

+0

+1! Ceci est suffisamment long pour un besoin si simple que je souhaite que 'pie()' ait un paramètre 'start_angle' supplémentaire. – EOL

+2

@EOL - Je suis d'accord, il semble terriblement compliqué pour ce qui devrait être un besoin assez commun et simple ... Peut-être une demande d'amélioration pour un paramètre 'start_angle' est une bonne idée? Je ne peux pas imaginer que tu es la seule personne à avoir eu besoin de 'pie()' pour commencer sous un angle différent ... –