python - no se puede realizar reducir con tipo flexible plt.hist
text matplotlib (2)
Tengo un conjunto de datos con miles de elementos y sus respectivas frecuencias. Necesito trazar un histograma de los 10 elementos principales.
yo si:
top_words = Counter(my_data).most_common()
top_words_10 = top_words[:10]
plt.hist(top_words_10,label=''True'')
y obtuve este error:
TypeError
Traceback (most recent call last)
<ipython-input-29-ff974b3a2354> in <module>()
5 print top_words[:10]
6
----> 7 plt.hist(top_words_10)
C:/Anaconda/lib/site-packages/numpy/core/_methods.pyc in _amin(a, axis, out, keepdims)
12 def _amin(a, axis=None, out=None, keepdims=False):
13 return um.minimum.reduce(a, axis=axis,
---> 14 out=out, keepdims=keepdims)
15
16 def _sum(a, axis=None, dtype=None, out=None, keepdims=False):
TypeError: cannot perform reduce with flexible type
¿¿Alguna idea?? Mis datos se ven así:
[('' whitefield'', 65299), ('' bellandur'', 57061), ('' kundalahalli'', 51769), ('' marathahalli'', 50639), ('' electronic city'', 44041), ('' sarjapur road junction'', 34164), ('' indiranagar 2nd stage'', 32459), ('' malleswaram'', 32171), ('' yelahanka main road'', 28901), ('' domlur'', 28869)]
El problema es que plt.hist
intenta usar nmupy.hist
para hacer un histograma a partir de los datos que usted nmupy.hist
.
Solo quieres usar la bar
import matplotlib.pyplot as plt
fig, ax = plt.subplots(1, 1)
words, counts = zip(*data32) # unpack pairs into two lists
ax.bar(range(len(counts)), words, align=''center'')
ax.set_xticks(range(len(counts))
ax.set_xticklabels(words) # this is about the _only_ use for set_xticklabels
plt.draw
Vea este ejemplo y la documentation .
Recibes este error porque necesitas convertir tus datos a un tipo numérico. Su matriz contiene cadenas.
import matplotlib.pyplot as plt
import numpy as np
data = [('' whitefield'', 65299), ('' bellandur'', 57061), ('' kundalahalli'', 51769), ('' marathahalli'', 50639),
('' electronic city'', 44041), ('' sarjapur road junction'', 34164), ('' indiranagar 2nd stage'', 32459),
('' malleswaram'', 32171), ('' yelahanka main road'', 28901), ('' domlur'', 28869)]
freequency = []
words = []
for line in data:
freequency.append(line[1])
words.append(line[0])
y_axis = np.arange(1, len(words) + 1, 1)
plt.barh(y_axis, freequency, align=''center'')
plt.yticks(y_axis, words)
plt.show()