如何从用户定义的函数直接转移到图表?

时间:2014-12-04 23:14:06

标签: python return-value pie-chart

我正在尝试构建一个模块,该模块将计算文本中的所有颜色词,然后将其显示在饼图上。我已经将计数和图表单独编码,但我无法弄清楚如何连接它们。

现在我有:

def colorperc(text):
    y0 = text.count("red")...text.count("rust")
    y1 = ... 
    return {y0...y10}

colorperc(mobydick.txt)

...
fracs y0, y1...

如何获取这些返回值并将其插入饼图压缩?我只是一直收到错误:NameError:名称'y0'未定义

1 个答案:

答案 0 :(得分:0)

首先,text.count不太可能做你想做的事。

>>> "Red wired tired".count("red")
2

您可能希望逐行读取文本,小写并拆分每一行,然后更新Counter。然后正如Matt所说,你需要分配你的函数返回的值,而不是试图访问局部变量。

由于你的评论说你正在使用nltk,可能是这样的(未经测试)。我们假设您很高兴将整个文本记录在内存中,因为这与您的问题描述相符。

from collections import Counter
import matplotlib.pyplot as plt
import nltk

def countcolors(text)
  tokens = nltk.word_tokenize(text)
  tokens = map(lamda x: x.lower(), tokens)
  ctr = Counter(tokens)
  colorlist = ("red", "rust", "blue", "green")
  colorcounts = dict((color,ctr[color]) for clr in colorlist)
  return colorcounts

#we'll call the text in memory `mytext`

colors, counts = countcolors(mytext).items()
fig, ax = plt.subplots(1,1)
ax.pie(counts,labels=colors)
plt.show()

请注意,我们只需使用赋值(使用=)来获取函数返回的值。