如何在Python中使用[matplotlib]绘制第一个扇形位于顶部的饼图?

4

如何使用Matplotlib绘制一个饼图,使第一块扇形从正上方开始(即从12点钟方向开始)?pyplot.pie()的默认设置是第一块扇形从3点钟方向开始,如果能够自定义设置就更好了。


1
在Matplotlib中绘制饼图,并在特定角度上显示分数。 - user1695759
2个回答

6

这有点像是一种技巧,但你可以这样做...

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


1
+1!这个简单的需求需要足够长的代码,我希望 pie() 函数有一个额外的 start_angle 参数。 - Eric O. Lebigot
3
我同意,这似乎为一个相当普遍和简单的需求而变得异常复杂了...也许提出一个“start_angle”参数的增强请求是个好主意?我无法想象你是第一个需要pie()从不同角度开始的人... - Joe Kington

6

只是因为这个在谷歌搜索中出现了,我要补充说,与此同时,matplotlib已经包含了这个作为pie函数的额外参数。

现在,可以调用plt.pie(data, startangle=90)来使第一个楔形从正午开始。

关于此的PyPlot文档


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接