为Matplotlib pie ch中的数据指定特定颜色

2024-09-30 14:26:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用matplotlib创建饼图,其中每个类别的颜色都是固定的。

我有一个函数,它从一组值和类别数据创建一个饼图。下面是一个例子:

Category     Value
TI           65
Con          43
FR           40
TraI         40
Bug          38
Data         22
Int          15
KB           12
Other        8
Dep          7
PW           6
Uns          5
Perf         4
Dep          3

问题是,不同实例的数据不同,进而改变了类别的顺序。因此,每次生成图表时,每个类别都会被标记为不同的颜色。我可以每次按字母顺序对数据进行排序,但这会导致两个问题:一些数据集中缺少某些类别,而且我还是希望按大小排序,这样最小的楔子就可以水平放置。

如何设置matplotlib以根据pandas.Series的索引指定颜色?

下面是我用来生成饼图的代码:

import matplotlib.pyplot as plt

slices = [62, 39, 39, 38, 37, 21, 15,  9,  6,  7,  6,  5,  4, 3]

cmap = plt.cm.prism
colors = cmap(np.linspace(0., 1., len(slices)))

labels = [u'TI', u'Con', u'FR', u'TraI', u'Bug', u'Data', u'Int', u'KB', u'Other', u'Dep', u'PW', u'Uns', u'Perf', u'Dep']

fig = plt.figure(figsize=[10, 10])
ax = fig.add_subplot(111)

pie_wedge_collection = ax.pie(slices, colors=colors, labels=labels, labeldistance=1.05, autopct=make_autopct(slices))

for pie_wedge in pie_wedge_collection[0]:
    pie_wedge.set_edgecolor('white')

titlestring = 'Issues'

ax.set_title(titlestring)

编辑:我忘了解释autopct函数,它用于添加值和百分比标签:

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

Tags: 数据函数labelsmatplotlib颜色pltax类别