我如何使用 matplotlib autopct?

新手上路,请多包涵

我想创建一个 matplotlib 饼图,其中每个楔形的值都写在楔形的顶部。

文档 建议我应该使用 autopct 来执行此操作。

autopct:[无|格式字符串 | format function ] 如果不是 None,是一个字符串或函数,用于用它们的数值标记楔形。标签将放置在楔形内。如果它是格式字符串,则标签将为 fmt%pct。如果它是一个函数,它将被调用。

不幸的是,我不确定这个格式字符串或格式函数应该是什么。

使用下面的这个基本示例,如何在其楔形顶部显示每个数值?

 plt.figure()
values = [3, 12, 5, 8]
labels = ['a', 'b', 'c', 'd']
plt.pie(values, labels=labels) #autopct??
plt.show()

原文由 Kim 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.6k
2 个回答

autopct 使您能够使用 Python 字符串格式显示百分比值。例如,如果 autopct='%.2f' ,则对于每个饼图楔形,格式字符串为 '%.2f' 并且该楔形的数字百分比值为 pct label-0设置为字符串 '%.2f'%pct

 import matplotlib.pyplot as plt
plt.figure()
values = [3, 12, 5, 8]
labels = ['a', 'b', 'c', 'd']
plt.pie(values, labels=labels, autopct='%.2f')
plt.show()

产量带百分比的简单饼图

您可以通过向 autopct 提供可调用来做更有趣的事情。要同时显示百分比值和原始值,您可以这样做:

 import matplotlib.pyplot as plt

# make the pie circular by setting the aspect ratio to 1
plt.figure(figsize=plt.figaspect(1))
values = [3, 12, 5, 8]
labels = ['a', 'b', 'c', 'd']

def make_autopct(values):
    def my_autopct(pct):
        total = sum(values)
        val = int(round(pct*total/100.0))
        return '{p:.2f}%  ({v:d})'.format(p=pct,v=val)
    return my_autopct

plt.pie(values, labels=labels, autopct=make_autopct(values))
plt.show()

包含百分比和绝对数字的饼图。

同样,对于每个饼图,matplotlib 提供百分比值 pct 作为参数,尽管这次它作为参数发送给函数 my_autopct 。楔形标签设置为 my_autopct(pct)

原文由 unutbu 发布,翻译遵循 CC BY-SA 3.0 许可协议

你可以做:

 plt.pie(values, labels=labels, autopct=lambda p : '{:.2f}%  ({:,.0f})'.format(p,p * sum(values)/100))

原文由 caydin 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏