失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Linux Ubuntu 16.04 Python matplotlib安装中文字体 黑体 楷体 Times New Roman等 解决中文乱码

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

时间:2022-01-27 08:55:32

相关推荐

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。如下两图

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

本人用的Xshell和Xftp。在这一步,一直在上传到Ubuntu时,不成功,终于想到是权限问题。如下图,提示权限不够,第一次碰到Xftp上传不成功。。。正好Xftp5还强制更新,还以为这软件不更新用不了上传功能了,不过因为这次上传问题,让我发现要注意到Linux普通用户是不能改动根目录下文件夹,会提示权限不够。如下图,失败case。

这种情况,就是你直接把Windows下文件拷贝到Ubuntu虚拟机的/usr/share/fonts目录时,权限不够。查看/usr/share/fonts的权限如下

可以看到,普通用户是无法向这个目录写入文件的。因此我用su root命令切换到超级用户,发现竟然还是这个错误,不清楚为什么,各位博友,有清楚的请在评论中指出。但是,问题总会有多种方法解决的。不能直接上传到根目录下,那就先上传到普通用户下吧,也就是本人的家目录。如下图,

可以看到终于成功了,很欣慰。。。

此时就好办了,切换到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目录下了。如下图,

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

这一步该刷新字体缓存了。首先在Ubuntu上打开LibreOffice,看一下字体里是没有黑体的,如下图

没装没刷新之前当然没有了!!

现在来用命令

sudo fc-cache -f -v

刷新Ubuntu字体缓存。如下图可以看到在我们的目录/usr/share/fonts/winfonts中找到一种新字体,就是咱们要安装的黑体啊!!!

然后重新打开libreoffice,见证奇迹的时刻!!!

我们的黑体终于能用了!!!到这里,你会发现你想用其它的楷体,宋体,都可以按上面步骤安装了。我在网上查到诸多博客,好多都。。。你们懂得,我用时一天终于自己摸索出来,特此记下来。希望对看到的你有所帮助。我们整理东西一定要自己验证过,要把重要细节写完美,否则,发到网上的都是垃圾内容。

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

首先看问题,如果在Ubuntu Linux下用matplotlib画图,如果没有安装中文字体。在中文处则显示乱码小方块。如下图

因此,我们要先安装中文字体,步骤就是上面。但是经过刚刚明明看到我们已经安装黑体,但是为什么还是显示乱码小方块呢。就是没有刷新matplotlib的字体缓存了。首先打开一个Python环境,找到matplotlib字体缓存目录。如下代码:

import matplotlib as plt

plt.get_cachedir()

本人机器上操作的如下图,

直接用如下命令

rm -rf /home/rain/.cache/matplotlib

删除这个缓存目录就可以了。如下图

接着在运行一下刚才的画图程序,见证奇迹的时刻到了!!!如下图

到这里,终于解决Ubuntu上Python matplotlib画图,用中文字体,simhei,times new roman的问题了。

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

当在.py文件中用楷体时竟然还是小方块???明明libreoffice里面已经可以用了。难道是引用字体名不对?如下图:

看来的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’????

在.py文件中更证名字,然后又到了见证奇迹的时刻!!如下图

到这里你终于学到如果解决Ubuntu Python matplotlib画图中所以字体问题了,真是百转千折,但是你也深入了解了Linux许多原理,对于需要经常用Linux的你还是非常有帮助,如果你只需要用Python做机器学习换图,建议还是用windows+Anaconda+PyCharm+Notebook吧,不会遇到这么多配置问题,实力劝退一波哈哈。

七、参考文献

[1] /u014712482/article/details/80568540

[2] /question/25404709

如果觉得《Linux Ubuntu 16.04 Python matplotlib安装中文字体 黑体 楷体 Times New Roman等 解决中文乱码》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。