こんにちは私は(キーとして)色を表す3-int-tupleと(値として)画像内のその色の出現数を表すintを持つdictを持っています
たとえば、これは3色の4x4ピクセルの画像です:{(87、82、44):1、(255、245、241):11、(24、13、9):4}
円グラフの各スライスが正しい色で色付けされたリスト[1,11,4]の円グラフをプロットしたいのですが、どうすればよいですか?
こんにちは私は(キーとして)色を表す3-int-tupleと(値として)画像内のその色の出現数を表すintを持つdictを持っています
たとえば、これは3色の4x4ピクセルの画像です:{(87、82、44):1、(255、245、241):11、(24、13、9):4}
円グラフの各スライスが正しい色で色付けされたリスト[1,11,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()
結果は次のようになります。
マークは私を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()