如何绘制一个颜色列表的饼图

时间:2011-02-27 14:55:35

标签: python colors matplotlib pie-chart

我有一个带有3-int-tuple表示颜色(作为键)的字典,以及一个表示图像中该颜色出现次数的int(作为值)

例如,这是一个4x4像素的图像,有3种颜色: {(87,82,44):1,(255,245,241):11,(24,13,9):4}

我想绘制一个列表[1,11,4]的饼图,其中饼图的每个切片都用正确的颜色着色..我该怎么办?

2 个答案:

答案 0 :(得分:4)

更新:other answer from Paul要好得多,但在我编辑原始答案之前并没有任何意义,直到它基本相同:)(我无法删除这个答案,因为它被接受了。)

这样做你想要的吗?我刚刚使用an example from the matplotlib documentation并将您的数据转换为pie()期望的参数:

# This is a trivial modification of the example here:
# http://matplotlib.sourceforge.net/examples/pylab_examples/pie_demo.html

from pylab import *

data = {(87, 82, 44): 1, (255, 245, 241): 11, (24, 13, 9): 4}

colors = []
counts = []

for color, count in data.items():
    colors.append([float(x)/255 for x in color])
    counts.append(count)

figure(1, figsize=(6,6))

pie(counts, colors=colors, autopct='%1.1f%%', shadow=True)
title('Example Pie Chart', bbox={'facecolor':'0.8', 'pad':5})

show()

结果如下:

The resulting pie chart

答案 1 :(得分:3)

马克在5分钟内击败了我,所以积分应该归他所有,但不管怎样,这是我的(几乎相同,但更简洁)的答案:

from matplotlib import pyplot

data = {(87, 82, 44): 1, (255, 245, 241): 11, (24, 13, 9): 4}
colors, values = data.keys(), data.values()
# matplotlib wants colors as 0.0-1.0 floats, not 0-255 ints
colors = [tuple(i/255. for i in c) for c in colors]
pyplot.pie(values, colors=colors)
pyplot.show()