我是一名nltk初学者。最近,我在绘制模态频率的条形图时遇到了困难。
colors = 'rgbcmyk'
def bar_chart(categories, words, counts):
import pylab
ind = pylab.arange(len(words))
width = 1 / (len(categories) + 1)
bar_groups = []
for c in range(len(categories)):
bars = pylab.bar(ind+c*width, counts[categories[c]], width,
color=colors[c % len(colors)])
bar_groups.append(bars)
pylab.xticks(ind+width, words)
pylab.legend([b[0] for b in bar_groups], categories, loc = 'upper left')
pylab.ylabel('Frequency')
pylab.title('Frequency of Six Modal Verbs by Genre')
pylab.show()
import nltk
from nltk.corpus import brown
genres = ['news', 'religion', 'hobbies', 'government', 'adventure']
modals = ['can', 'could', 'may', 'might', 'must', 'will']
cfd = nltk.ConditionalFreqDist(
(genre, word)
for genre in brown.categories()
for word in brown.words(categories = genre)
if word in modals)
counts = {}
for genre in genres:
counts[genre] = [cfd[genre][word] for word in modals]
bar_chart(genre, modals, counts)
格式可以在运行函数'bar_chart'后由Python提供,但无法看到该栏。我怀疑Python是不是从棕色读取数据,所以我使用了:
cfd.tabulate(conditions = genres, samples = modals)
输出:
can could may might must will news 93 86 66 38 50 389 religion 82 59 78 12 54 71 hobbies 268 58 131 22 83 264 government 117 38 153 13 102 244 adventure 46 151 5 58 27 50
似乎Python读取数据。我想确保错误在哪里。非常感谢你。
答案 0 :(得分:2)
我总是讨厌处理条形图,尽量抽出尽可能多的努力。一种方法是使用Pandas将数据作为DataFrame加载,然后使用其绘图界面(使用matplotlib)创建条形图。
所以你可以摆脱bar_chart
函数并执行类似的操作:
import pandas as pd
df = pd.DataFrame(list(counts.values()), counts.keys(), modals)
df.plot(kind='bar')
据说显示图像的麻烦实际上取决于你正在使用的环境。如果你在Jupyter,你可以使用魔术命令%matplotlib inline
,并在调用绘图后立即弹出图像方法。如果您正在编写脚本并希望保存图像,则可以执行以下操作:
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
df.plot(kind='bar', ax=ax)
plt.tight_layout()
plt.savefig('some file name.png')
答案 1 :(得分:0)
我想知道您是否尝试从cmdline或某些IDE运行它。在后一种情况下,IDE可能会阻止显示图表。尝试命令行。