как построить круговой список цветов - PullRequest
0 голосов
/ 27 февраля 2011

привет, у меня есть dict с 3-целым кортежем, представляющим цвет (как ключ), и int, представляющий количество вхождений этого цвета в изображение (как значение)

для примера, это изображение 4x4 пикселей с 3 цветами: {(87, 82, 44): 1, (255, 245, 241): 11, (24, 13, 9): 4}

Я хочу построить круговую диаграмму списка [1,11,4], в которой каждый кусочек круговой диаграммы окрашен в нужный цвет. Как я могу это сделать?

Ответы [ 2 ]

4 голосов
/ 27 февраля 2011

Обновление: другой ответ от Пола намного лучше, но на самом деле нет никакого смысла во мне просто редактировать свой исходный ответ, пока он по сути не будет таким :) (я не могу удалить этот ответпотому что это принято.)

Делает ли это то, что вы хотите?Я просто взял пример из документации 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()

Результат выглядит так:

The resulting pie chart

3 голосов
/ 27 февраля 2011

Марк избил меня на 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()
...