如何在Python中使用字长来制作直方图?

时间:2018-02-23 09:46:36

标签: python matplotlib

我必须制作一个直方图,它显示一首诗中的单词长度频率。 我有频率,但我不能在直方图中表示它。 这是我的代码:

full = "Ej mi a kő! tyúkanyó, kend A szobában lakik itt bent? Lám, csak jó az isten, jót ád, Hogy fölvitte a kend dolgát!  Itt szaladgál föl és alá, Még a ládára is fölszáll, Eszébe jut, kotkodákol, S nem verik ki a szobábol. Dehogy verik, dehogy verik! Mint a galambot etetik, Válogat a kendermagban, A kiskirály sem él jobban. Ezért aztán, tyúkanyó, hát Jól megbecsűlje kend magát, Iparkodjék, ne legyen ám Tojás szűkében az anyám. – Morzsa kutyánk, hegyezd füled, Hadd beszélek mostan veled, Régi cseléd vagy a háznál, Mindig emberűl szolgáltál, Ezután is jó légy, Morzsa, Kedvet ne kapj a tyúkhusra, Élj a tyúkkal barátságba’... Anyám egyetlen jószága."
vs = full.translate(string.punctuation)
vers =  vs.lower().split()
c=[len(i) for i in vers] # gives [3, 3, 5, 5, 3, 6, 4, 4, 3, 5]
counts=[0]*max(c)      # gives [0, 0, 0, 0, 0, 0]
for i in range(len(c)):
  counts[c[i]-1]+=1    # adds 1 to each index of c[i] (we subtract 1 because of 0-based indices)
print(counts)

plt.hist(counts, 14)

我做错了什么? X和Y轴反转,表示单词长度相反。 :( 提前谢谢。

1 个答案:

答案 0 :(得分:0)

这就是你要找的东西。我提到了这个 - (Using Counter() in Python to build histogram?

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

full = "Ej mi a kő! tyúkanyó, kend A szobában lakik itt bent? Lám, csak jó az isten, jót ád, Hogy fölvitte a kend dolgát!  Itt szaladgál föl és alá, Még a ládára is fölszáll, Eszébe jut, kotkodákol, S nem verik ki a szobábol. Dehogy verik, dehogy verik! Mint a galambot etetik, Válogat a kendermagban, A kiskirály sem él jobban. Ezért aztán, tyúkanyó, hát Jól megbecsűlje kend magát, Iparkodjék, ne legyen ám Tojás szűkében az anyám. – Morzsa kutyánk, hegyezd füled, Hadd beszélek mostan veled, Régi cseléd vagy a háznál, Mindig emberűl szolgáltál, Ezután is jó légy, Morzsa, Kedvet ne kapj a tyúkhusra, Élj a tyúkkal barátságba’... Anyám egyetlen jószága."
xxx=list(full)
labels, values = zip(*Counter(xxx).items())

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

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