gpt4 book ai didi

python - 如何在 matplotlib 饼图中显示实际值

转载 作者:太空狗 更新时间:2023-10-29 22:18:10 26 4
gpt4 key购买 nike

我有一个饼图,绘制了从 CSV 文件中提取的值。当前显示的值的比例以百分比显示“autopct='%1.1f%%'”。有没有一种方法可以显示每个切片在数据集中表示的实际值。

#Pie for Life Expectancy in Boroughs
import pandas as pd
import matplotlib
import matplotlib.pyplot as plt

# show plots inline
%matplotlib inline

# use ggplot style
matplotlib.style.use('ggplot')

#read data
lifeEx = pd.read_csv('LEpie.csv')

#Select columns
df = pd.DataFrame()
df['LB'] = lifeEx[['Regions']]
df['LifeEx'] = lifeEx[['MinLF']]
colorz = ['#B5DF00','#AD1FFF', '#BF1B00','#5FB1FF','#FFC93F']
exploda = (0, 0, 0, 0.1, 0)


#plotting
plt.pie(df['LifeEx'], labels=df['LB'], colors=colorz, autopct='%1.1f%%', explode = exploda, shadow = True,startangle=90)

#labeling
plt.title('Min Life expectancy across London Regions', fontsize=12)

最佳答案

使用autopct关键字

正如我们所知,显示的百分比乘以所有实际值的总和必须是实际值,我们可以将其定义为一个函数,并使用 将此函数提供给 plt.pie autopct 关键字。

import matplotlib.pyplot as plt
import numpy

labels = 'Frogs', 'Hogs', 'Dogs'
sizes = numpy.array([5860, 677, 3200])
colors = ['yellowgreen', 'gold', 'lightskyblue']

def absolute_value(val):
a = numpy.round(val/100.*sizes.sum(), 0)
return a

plt.pie(sizes, labels=labels, colors=colors,
autopct=absolute_value, shadow=True)

plt.axis('equal')
plt.show()

必须小心,因为计算涉及一些错误,因此提供的值仅精确到某些小数位。

更高级的可能是下面的函数,它通过比较计算值和输入数组之间的差异来尝试从输入数组中取回原始值。这种方法不存在不准确的问题,但依赖于彼此足够不同的输入值。

def absolute_value2(val):
a = sizes[ numpy.abs(sizes - val/100.*sizes.sum()).argmin() ]
return a

创建饼图后更改文本

另一种选择是先用百分比值绘制饼图,然后再替换它们。为此,可以存储由 plt.pie() 返回的 autopct 标签,并循环遍历它们以用原始数组中的值替换文本。注意,plt.pie() 仅返回三个参数,最后一个是感兴趣的标签,当提供 autopct 关键字时,我们在这里将其设置为空字符串。

labels = 'Frogs', 'Hogs', 'Dogs'
sizes = numpy.array([5860, 677, 3200])
colors = ['yellowgreen', 'gold', 'lightskyblue']

p, tx, autotexts = plt.pie(sizes, labels=labels, colors=colors,
autopct="", shadow=True)

for i, a in enumerate(autotexts):
a.set_text("{}".format(sizes[i]))

plt.axis('equal')
plt.show()

关于python - 如何在 matplotlib 饼图中显示实际值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41088236/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com