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

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

问题描述

我有一个饼图,它绘制了从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关键字

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

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标签,并在它们上循环以用原始数组中的值替换文本.注意,当提供autopct关键字时,plt.pie()仅返回三个参数,最后一个是感兴趣的标签,因此我们在此处将其设置为空字符串.

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饼图中显示实际值(Python)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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