如何在 Python 中绘制第一个楔形在顶部的饼图? [matplotlib]

发布于 2024-09-25 23:04:08 字数 94 浏览 1 评论 0原文

如何使用 Matplotlib 绘制第一个楔形从中午开始(即在饼图顶部)的饼图? pyplot.pie() 默认将第一个边缘放置在三点钟位置,如果能够自定义这一点那就太好了。

How can a pie chart be drawn with Matplotlib with a first wedge that starts at noon (i.e. on the top of the pie)? The default is for pyplot.pie() to place the first edge at three o'clock, and it would be great to be able to customize this.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

遮了一弯 2024-10-02 23:04:08

正因为我在 Google 搜索中出现了这个问题,所以我会同时补充一点,matplotlib 已将其作为 pie 函数的附加参数包含在内。

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

有关此的 PyPlot 文档

Just because this came up in a Google search for me, I'll add that in the meantime, matplotlib has included just this as an additional argument to the pie function.

Now, one can call plt.pie(data, startangle=90) to have the first wedge start at noon.

PyPlot documentation on this

终难愈 2024-10-02 23:04:08

这有点像黑客,但你可以做这样的事情...

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

示例饼图

It's a bit of a hack, but you can do something like this...

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文