我有一个饼图,绘制从CSV文件中提取的值。当前显示的值的比例显示百分比“autopct ='%1.1f %%'”。有没有办法显示每个切片的数据集中表示的实际值。
0 dislikes
5 likes
98 views
答案 0 :(得分:9)
autopct
关键字我们知道显示所有实际值之和的百分比必须是实际值,我们可以将其定义为函数,并使用plt.pie
关键字将此函数提供给autopct
。< / p>
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()