为 Matplotlib 饼图中的数据分配特定颜色

您所在的位置:网站首页 pandas和matplotlib的关系 为 Matplotlib 饼图中的数据分配特定颜色

为 Matplotlib 饼图中的数据分配特定颜色

2023-03-24 13:27| 来源: 网络整理| 查看: 265

回答问题

我正在尝试使用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 Answers

这是一个你可以尝试的想法。根据您的标签和颜色制作字典,以便将每种颜色映射到一个标签。然后,在制作饼图后,使用该字典输入楔形的facecolor。

这是一段 untested 的代码,它可能会满足您的需求:

import numpy as np import matplotlib.pyplot as plt def mypie(slices,labels,colors): colordict={} for l,c in zip(labels,colors): print l,c colordict[l]=c fig = plt.figure(figsize=[10, 10]) ax = fig.add_subplot(111) pie_wedge_collection = ax.pie(slices, labels=labels, labeldistance=1.05)#, autopct=make_autopct(slices)) for pie_wedge in pie_wedge_collection[0]: pie_wedge.set_edgecolor('white') pie_wedge.set_facecolor(colordict[pie_wedge.get_label()]) titlestring = 'Issues' ax.set_title(titlestring) return fig,ax,pie_wedge_collection slices = [37, 39, 39, 38, 62, 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,ax,pie_wedge_collection = mypie(slices,labels,colors) plt.show()


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3