我试图用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
目前没有回答
相关问题 更多 >
编程相关推荐