嗨,我有一个 dict,其中 3-int-tuple 表示颜色(作为键)和一个 int 表示图像中该颜色的出现次数(作为值)
例如,这是一个具有 3 种颜色的 4x4 像素图像:{(87, 82, 44): 1, (255, 245, 241): 11, (24, 13, 9): 4}
我想绘制列表 [1,11,4] 的饼图,其中饼图的每个切片都用正确的颜色着色.. 我该怎么办?
嗨,我有一个 dict,其中 3-int-tuple 表示颜色(作为键)和一个 int 表示图像中该颜色的出现次数(作为值)
例如,这是一个具有 3 种颜色的 4x4 像素图像:{(87, 82, 44): 1, (255, 245, 241): 11, (24, 13, 9): 4}
我想绘制列表 [1,11,4] 的饼图,其中饼图的每个切片都用正确的颜色着色.. 我该怎么办?
更新:保罗的另一个答案要好得多,但我只是编辑我的原始答案,直到它基本上相同:) (我不能删除这个答案,因为它被接受了。)
这是做你想做的吗?我只是从 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()
结果如下所示:
马克以 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()