从上个月开始,NLTK dispersion_plot似乎在我的机器上有y(垂直)轴的颠倒顺序。这可能与我的软件版本有关(我在学校的虚拟机上)。
版本:nltk 3.8.1 matplotlib 3.7.2 Python 3.9.13
验证码:
from nltk.draw.dispersion import dispersion_plot
words=['aa','aa','aa','bbb','cccc','aa','bbb','aa','aa','aa','cccc','cccc','cccc','cccc']
targets=['aa','bbb', 'f', 'cccc']
dispersion_plot(words, targets)
预期:在开始时,有一个人在场,在结束时,有一个人在场。实际:它是向后的!还注意,F应该完全不存在,而不是BBB不存在。
结论:Y轴向后。
2条答案
按热度按时间46qrfjad1#
我发现源代码nltk.draw.dispersion,似乎有错误。
它使用
reversed(words)
计算word2y
但后来它使用
ax.set_yticks()
使用words
但它应该使用reversed(words)
(or它应该计算
word2y
而不使用reversed()
)。我在上面的代码中添加了
# <--- HERE
来显示这些地方。它可能需要将其作为一个问题报告。
此时,您可以获取
ax
并使用set_yticks
和reversed
来纠正它。在您的代码中,它将是
targets
而不是words
完整工作代码
**编辑:**我似乎这个问题是几个月前报告的,他们在GitHub上的代码中添加了
reversed()
-可能它会在下一个版本中工作dispersion plot not working properly · Issue #3133 · nltk/nltk
dispersion plot not working properly by Apros7 · Pull Request #3134 · nltk/nltk
lnvxswe22#
基于@furas的答案️,我进一步添加了一个if条件,只有当y ticks确实被打破/向后时才反转它们。这意味着一旦他们修复了库错误(这意味着很快),代码仍然可以工作。
(我在本地修复了图形库,并使用新版本进行了测试,代码可以在旧的坏库和新修复的库上工作)x1c 0d1x