我必须制作一个直方图,它显示一首诗中的单词长度频率。 我有频率,但我不能在直方图中表示它。 这是我的代码:
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轴反转,表示单词长度相反。 :( 提前谢谢。
答案 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()