Linux Ubuntu 16.04 Python matplotlib安装中文字体,黑体,楷体,Times New Roman等,解决中文乱码

Linux Ubuntu 16.04 Python matplotlib安装中文字体,Times New Roman等

文章目录

  • Linux Ubuntu 16.04 Python matplotlib安装中文字体,Times New Roman等
    • 一、用apt-get工具安装Times New Roman字体,即安装ttf-mscorefonts-installer,但此字体包,不包括楷体,黑体等。
    • 二、将Windows下的黑体,楷体等安装到Ubuntu及matplotlib下。
    • 三、将上面拷贝的字体上传到Ubuntu系统(注意Linux系统权限问题
    • 四、刷新Ubuntu系统字体缓存,和matplotlib字体缓存(matplotlib的字体缓存也要刷新,matplotlib才能用,重要)
    • 五、接下来就是,刷新matplotlib字体缓存了。
    • 六、但是,我发现竟然用楷体的时候有个问题
    • 七、参考文献

当我们在Ubuntu Linux下使用Python matplotlib画图时,会发现不能用Times New Roman,楷体,黑体等Windows上常用的字体,尤其是用中文显示图标签时,会出现小方框/块,这是因为Linux下本身不自带这些常用字体(因为版权原因)。因此需要我们自己动手装,本人查找了了网上好多篇用时一天,,总之一言难尽,最后终于整好了。记录下了特别详细了的步骤,以供需要之人参考。绝对可靠。

一、用apt-get工具安装Times New Roman字体,即安装ttf-mscorefonts-installer,但此字体包,不包括楷体,黑体等。

如果只需用Times New Roman字体,可以参见本人此篇博客。 Ubuntu下安装Times New Roman字体.

二、将Windows下的黑体,楷体等安装到Ubuntu及matplotlib下。

上面提到mscorefonts这个字体包里不包含楷体黑体等,因此需要将Windows下的字体安装到Ubuntu下。下面以安装黑体为例,讲解具体步骤,学会一种,其它字体一样。

首先在Windows下,进入C:\Windows\Fonts目录,找到你想要的字体,即黑体,拷贝到一个新建文件夹,如本人命名的winfonts。如下两图
Linux Ubuntu 16.04 Python matplotlib安装中文字体,黑体,楷体,Times New Roman等,解决中文乱码_第1张图片
Linux Ubuntu 16.04 Python matplotlib安装中文字体,黑体,楷体,Times New Roman等,解决中文乱码_第2张图片

三、将上面拷贝的字体上传到Ubuntu系统(注意Linux系统权限问题

本人用的Xshell和Xftp。在这一步,一直在上传到Ubuntu时,不成功,终于想到是权限问题。如下图,提示权限不够,第一次碰到Xftp上传不成功。。。正好Xftp5还强制更新,还以为这软件不更新用不了上传功能了,不过因为这次上传问题,让我发现要注意到Linux普通用户是不能改动根目录下文件夹,会提示权限不够。如下图,失败case。
Linux Ubuntu 16.04 Python matplotlib安装中文字体,黑体,楷体,Times New Roman等,解决中文乱码_第3张图片
这种情况,就是你直接把Windows下文件拷贝到Ubuntu虚拟机的/usr/share/fonts目录时,权限不够。查看/usr/share/fonts的权限如下
在这里插入图片描述
可以看到,普通用户是无法向这个目录写入文件的。因此我用su root命令切换到超级用户,发现竟然还是这个错误,不清楚为什么,各位博友,有清楚的请在评论中指出。但是,问题总会有多种方法解决的。不能直接上传到根目录下,那就先上传到普通用户下吧,也就是本人的家目录。如下图,Linux Ubuntu 16.04 Python matplotlib安装中文字体,黑体,楷体,Times New Roman等,解决中文乱码_第4张图片
可以看到终于成功了,很欣慰。。。
在这里插入图片描述
此时就好办了,切换到root用户将其拷贝到/usr/share/fonts目录下即可,有三种方式,
1)第一种两行代码
sudo -i #或者用su root,都是切换到root用户
cp -rf /home/rain/winfonts/ /usr/share/fonts
2)第二种一行代码,不用切换到root用户
sudo cp -rf winfonts/ /usr/share/fonts
3)第三种就是用户界面方式操作,就是用root权限打开一个文件管理器窗口,这种就跟Windows操作一样了,直接赋值粘贴即可。
sudo nautilus

到这里,我们终于把文件拷贝到/usr/share/fonts目录下了。如下图,
Linux Ubuntu 16.04 Python matplotlib安装中文字体,黑体,楷体,Times New Roman等,解决中文乱码_第5张图片

四、刷新Ubuntu系统字体缓存,和matplotlib字体缓存(matplotlib的字体缓存也要刷新,matplotlib才能用,重要)

这一步该刷新字体缓存了。首先在Ubuntu上打开LibreOffice,看一下字体里是没有黑体的,如下图
Linux Ubuntu 16.04 Python matplotlib安装中文字体,黑体,楷体,Times New Roman等,解决中文乱码_第6张图片
没装没刷新之前当然没有了!!
现在来用命令
sudo fc-cache -f -v
刷新Ubuntu字体缓存。如下图可以看到在我们的目录/usr/share/fonts/winfonts中找到一种新字体,就是咱们要安装的黑体啊!!!
Linux Ubuntu 16.04 Python matplotlib安装中文字体,黑体,楷体,Times New Roman等,解决中文乱码_第7张图片
然后重新打开libreoffice,见证奇迹的时刻!!!
Linux Ubuntu 16.04 Python matplotlib安装中文字体,黑体,楷体,Times New Roman等,解决中文乱码_第8张图片
我们的黑体终于能用了!!!到这里,你会发现你想用其它的楷体,宋体,都可以按上面步骤安装了。我在网上查到诸多博客,好多都。。。你们懂得,我用时一天终于自己摸索出来,特此记下来。希望对看到的你有所帮助。我们整理东西一定要自己验证过,要把重要细节写完美,否则,发到网上的都是垃圾内容。
Linux Ubuntu 16.04 Python matplotlib安装中文字体,黑体,楷体,Times New Roman等,解决中文乱码_第9张图片

五、接下来就是,刷新matplotlib字体缓存了。

首先看问题,如果在Ubuntu Linux下用matplotlib画图,如果没有安装中文字体。在中文处则显示乱码小方块。如下图
Linux Ubuntu 16.04 Python matplotlib安装中文字体,黑体,楷体,Times New Roman等,解决中文乱码_第10张图片
因此,我们要先安装中文字体,步骤就是上面。但是经过刚刚明明看到我们已经安装黑体,但是为什么还是显示乱码小方块呢。就是没有刷新matplotlib的字体缓存了。首先打开一个Python环境,找到matplotlib字体缓存目录。如下代码:
import matplotlib as plt
plt.get_cachedir()
本人机器上操作的如下图,
Linux Ubuntu 16.04 Python matplotlib安装中文字体,黑体,楷体,Times New Roman等,解决中文乱码_第11张图片
直接用如下命令
rm -rf /home/rain/.cache/matplotlib
删除这个缓存目录就可以了。如下图
在这里插入图片描述
接着在运行一下刚才的画图程序,见证奇迹的时刻到了!!!如下图
在这里插入图片描述
Linux Ubuntu 16.04 Python matplotlib安装中文字体,黑体,楷体,Times New Roman等,解决中文乱码_第12张图片
到这里,终于解决Ubuntu上Python matplotlib画图,用中文字体,simhei,times new roman的问题了。

六、但是,我发现竟然用楷体的时候有个问题

当在.py文件中用楷体时竟然还是小方块???明明libreoffice里面已经可以用了。难道是引用字体名不对?如下图:
在这里插入图片描述
Linux Ubuntu 16.04 Python matplotlib安装中文字体,黑体,楷体,Times New Roman等,解决中文乱码_第13张图片
看来的SimKai这个名字不对了,可以用如下命令看一下楷体的引用名是什么:
import matplotlib as plt
import matplotlib.font_manager as font_manager
fontpath = '/usr/share/fonts/truetype/msttcorefonts/simkai.ttf'
prop = font_manager.FontProperties(fname=fontpath)
print(prop.get_name())
结果如下图,竟然叫‘KaiTi’而不是‘SimKai’????
Linux Ubuntu 16.04 Python matplotlib安装中文字体,黑体,楷体,Times New Roman等,解决中文乱码_第14张图片
在.py文件中更证名字,然后又到了见证奇迹的时刻!!如下图
在这里插入图片描述
Linux Ubuntu 16.04 Python matplotlib安装中文字体,黑体,楷体,Times New Roman等,解决中文乱码_第15张图片
到这里你终于学到如果解决Ubuntu Python matplotlib画图中所以字体问题了,真是百转千折,但是你也深入了解了Linux许多原理,对于需要经常用Linux的你还是非常有帮助,如果你只需要用Python做机器学习换图,建议还是用windows+Anaconda+PyCharm+Notebook吧,不会遇到这么多配置问题,实力劝退一波哈哈。


七、参考文献

[1] https://blog.csdn.net/u014712482/article/details/80568540
[2] https://www.zhihu.com/question/25404709

你可能感兴趣的:(Ubuntu,python,matplotlib,Ubuntu,matplotlib)