如何在 matplotlib 饼图中显示实际值 [英] How to have actual values in matplotlib Pie Chart displayed

查看:35
本文介绍了如何在 matplotlib 饼图中显示实际值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个饼图,绘制了从 CSV 文件中提取的值.当前显示值的比例,百分比显示为autopct='%1.1f%%'".有没有办法显示每个切片的数据集中表示的实际值.

I have a pie chart drawing the values extracted from a CSV file. The proportion of the values are currently displayed with the percentage displayed "autopct='%1.1f%%'". Is there a way to display the actual values which are represented in the dataset for each slice.

#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.pieautopct 关键字.

Using the autopct keyword

As we know that the percentage shown times the sum of all actual values must be the actual value, we can define this as a function and supply this function to plt.pie using the autopct keyword.

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

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

Care must be taken since the calculation involves some error, so the supplied value is only accurate to some decimal places.

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

A little bit more advanced may be the following function, that tries to get the original value from the input array back by comparing the difference between the calculated value and the input array. This method does not have the problem of inaccuracy but relies on input values which are sufficiently distinct from one another.

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

创建饼图后更改文本

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

Changing text after pie creation

The other option is to first let the pie being drawn with the percentage values and replace them afterwards. To this end, one would store the autopct labels returned by plt.pie() and loop over them to replace the text with the values from the original array. Attention, plt.pie() only returns three arguments, the last one being the labels of interest, when autopct keyword is provided so we set it to an empty string here.

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

这篇关于如何在 matplotlib 饼图中显示实际值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆