如何绘制颜色列表的饼图
你好,我有一个字典,这个字典的键是三元组,表示颜色,值是一个整数,表示这种颜色在一张图片中出现的次数。
举个例子,这是一张4x4像素的图片,有三种颜色:{(87, 82, 44): 1, (255, 245, 241): 11, (24, 13, 9): 4}。
我想画一个饼图,数据列表是[1, 11, 4],每一块饼图都用对应的颜色来填充。请问我该怎么做呢?
2 个回答
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()
4
更新:Paul的另一个回答要好得多,但我觉得没必要再修改我的原回答,因为这样基本上就一样了 :) (我不能删除这个回答,因为它已经被接受了。)
这个能满足你的需求吗?我只是从matplotlib的文档中找了个例子,然后把你的数据转成了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()
结果看起来是这样的: