2013-10-05 3 views
25

Я видел еще один вопрос, который мог бы использовать Counter(), чтобы подсчитать количество вхождений в наборе строк. Поэтому, если у меня есть ['A','B','A','C','A','A'], я получаю Counter({'A':3,'B':1,'C':1}). Но теперь, как я могу использовать эту информацию для построения гистограммы, например?Использование счетчика() в Python для построения гистограммы?

+2

Если вы хотите для построения гистограммы я предлагаю вам использовать numpy и matplotlib. – jabaldonedo

+0

. Посмотрите на [matplotlib] (http://matplotlib.org/) –

+4

технически, что * есть * гистограмма - у него есть компоненты (буквы) и частота (раз они происходят). Вы спрашиваете, как сделать это на гистограмме? –

ответ

42

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

from collections import Counter 
import numpy as np 
import matplotlib.pyplot as plt 


labels, values = zip(*Counter(['A','B','A','C','A','A']).items()) 

indexes = np.arange(len(labels)) 
width = 1 

plt.bar(indexes, values, width) 
plt.xticks(indexes + width * 0.5, labels) 
plt.show() 

Результат: enter image description here

+0

Что делать, если данные OP лучше всего подходят для гистограммы? Я знаю, что поздно в игре, но я хотел бы обновить ваш ответ, чтобы применить пример гистограммы (но я не уверен, как это сделать). Это ответит на заголовок вопроса. –

+0

@ThomasMatthew технически, это гистограмма. «barchart вместо гистограммы» больше относится к использованию 'matplotlib.pyplot.bar' вместо' matplotlib.pyplot.hist'. Я считаю, что 'bar' лучше работает с' Counter' (чего хочет OP), вот и все – Igonato

+0

Также это 3-летний вопрос, который, возможно, изменил – Igonato

9

Вы можете написать некоторые действительно лаконичный код, чтобы сделать это с помощью pandas:

In [24]: import numpy as np 

In [25]: from pandas import Series 

In [27]: sample = np.random.choice(['a', 'b'], size=10) 

In [28]: s = Series(sample) 

In [29]: s 
Out[29]: 
0 a 
1 b 
2 b 
3 b 
4 a 
5 b 
6 b 
7 b 
8 b 
9 a 
dtype: object 

In [30]: vc = s.value_counts() 

In [31]: vc 
Out[31]: 
b 7 
a 3 
dtype: int64 

In [32]: vc = vc.sort_index() 

In [33]: vc 
Out[33]: 
a 3 
b 7 
dtype: int64 

In [34]: vc.plot(kind='bar') 

Итоговое в:

enter image description here

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