原创不易,转载前请注明博主的链接地址:Blessy_Zhu https://blog.csdn.net/weixin_42555080
首先来看一下问题描述:
我要验证的内容是Zipf’s Law:
# -*- coding: utf-8 -*- from nltk import FreqDist f = open('C:/Users/Administrator/Desktop/novel.txt', 'r',encoding = 'utf-8') # 打开小说 string = f.read() f.close() words = [] for word in string: if word >= u'\u4e00' and word <= u'\u9fff': # 判断是否为汉字 words.append(word) fdist = FreqDist(words) #a = sorted(fdist) for key in fdist: print(key,fdist[key]) fdist.plot(10)
显示结果为:
统计的中文汉字没有显示出来,应该出现的目的结果为:
原因在于nltk中的plt其实是调用的是matplotlib中的plot。
matplotlib 从配置文件 matplotlibrc 中读取配置,字体相关内容也在其中。matplotlib 依次在以下四个位置寻找配置文件:
可以查询出配置文件以及当前使用的字体方式。可以看出使用的字体是/DejaVuSans.ttf, 这个文件不是中文的。
from matplotlib.font_manager import findfont,FontProperties if __name__=="__main__": #print(matplotlib.get_configdir()) print(findfont(FontProperties(family=FontProperties().get_family())))
结果:
D:\Python3.7\python.exe C:/Users/Administrator/PycharmProjects/practice1/1.py D:\Python3.7\Lib\site-packages\matplotlib\mpl-data\fonts\ttf\DejaVuSans.ttf
找到对应的文件夹,发现里面并没有SimHei.ttf这个文件。
现在如果想要显示中文,其中一个很重要的步骤就是将SimHei.ttf这个文件拷贝到这个文件夹中。如果你电脑上安装了word或者是WPS,肯定会有这个SimHei.ttf这个文件。如果没有,下载一个拷贝到D:\Python3.7\Lib\site-packages\matplotlib\mpl-data\fonts\ttf。
我的电脑上下载了word,所以通过在资源管理器中搜索SimHei.ttf就可以找到这个文件。
mpl-data目录下有matplotlib的配置文件matplotlibrc。进入编辑,在font.sans-serif中将SimHei设置为第一个也就是最高优先级。
一定要记得将前面的#号打开,让这行代码可以运行。这样工作就完成了。如果还是不行,还需要清除matplotlib中的缓存,最简单的办法就是关闭PyCharm然后再打开。最终结果如图:
这篇文章涉及的问题在使用matplotlib经常遇到,所以总结下来,希望对你有帮助。这篇文章就到这里了,欢迎大佬们多批评指正,也欢迎大家积极评论多多交流。