2014-09-20 4 views
1

Мне нужна частота чисел в списке, который я получил, используя библиотеку Counter. Кроме того, я получил ключи и значения, используя keys = Counter(list).keys() и values = Counter(list).values() соответственно, где list - это список номеров. Их выход в следующем виде:Как создать круговую диаграмму с использованием dict_values ​​в Python 3.4?

dict_keys(['0.2200', '0.2700', '0.6200', '0.3000', '0.2500', '0.3400', '0.5600', '0.3900', '0.5400', '0.5500', '0.7500', '0.4100', '0.2800', '0.4200', '0.3800', '0.6600', '0.2000', '0.5200', '0.7200']) 

и dict_values ​​([15, 3, 6, 13, 6, 3, 1, 3, 3, 5, 4, 14, 8, 5, 3, 5, 11, 3, 9])

Теперь я хочу, чтобы создать круговую диаграмму с помощью ключей и значений, которые я сделал это следующим образом:

import matplotlib.pyplot as pyplot 
pyplot.axis("equal") 
pyplot.pie(float(values),labels=float(keys),autopct=None) 
pyplot.show() 

Но я получаю сообщение об ошибке, как:

TypeError: float() argument must be a string or a number, not 'dict_values' 

Есть ли способ конвертировать dict_values в строку или число, поскольку функция, используемая для создания круговой диаграммы, принимает только строку или номер?

ответ

6

Вы должны перебрать значения и конвертировать их индивидуально поплавка:

pyplot.pie([float(v) for v in values], labels=[float(k) for k in keys], 
      autopct=None) 

The [expression for target in iterable] называется список понимание и создает список объектов.

Я не создавал бы Counter() дважды; создайте его один раз и повторно используйте:

counts = Counter(yourlist) 
pyplot.pie([float(v) for v in counts.values()], labels=[float(k) for k in counts], 
      autopct=None) 
+0

Большое спасибо. Ваше решение генерирует пирог точно так, как мне нужно. Я буду иметь в виду, что мне нужно преобразовать значения индивидуально с этого момента. еще раз спасибо :) – Sukarma

Смежные вопросы