【linux】解决matplotlib中文显示乱码

2023-12-20 02:23:19

一、Debian操作系统版本号

$ cat /etc/debian_version
12.4

二、问题

matplotlib中文显示乱码。

三、解决方法:

plt.rcParams["font.sans-serif"] = "Noto Sans CJK JP"

四、解决过程

1.问GPT

回答了一些相关问题,但是好像用处不大。

截至我的知识更新日期(2023年),Debian 12(被称为“Bookworm”)尚未正式发布。不过,安装中文字库的步骤在Debian GNU/Linux发行版之间通常是相似的。以下是在Debian系统上安装中文字体的通用步骤:

1. 打开一个终端窗口。

2. 首先,你需要更新你的软件包索引:

sudo apt update

3. 安装常见的中文字体包。

??? 你可以选择安装各种字体包,以下是一些例子:

????-?fonts-wqy-zenhei?— 文泉驿正黑字体。
????-?fonts-wqy-microhei?— 文泉驿微米黑字体。
????-?xfonts-wqy?— 文泉驿点阵字体。
????-?fonts-arphic-ukai?— 文鼎PL简双宋字体。

????-?fonts-arphic-uming?— 文鼎PL简明字体。

??? 要安装它们,执行命令:

sudo apt install fonts-wqy-zenhei fonts-wqy-microhei xfonts-wqy fonts-arphic-ukai fonts-arphic-uming
    

4. 安装完成后,你可能需要重新构建字体缓存:

sudo fc-cache -fv

5. 安装后,新字体就应该能够使用了,你可能需要重启一下你的应用软件或者整个会话(注销然后重新登录),以便应用程序能够识别新安装的字体。

根据你的需求,你还可能想要安装其它特定的中文字体包,可以通过包管理器搜索可用的字体包:

apt search chinese | grep fonts

或者更直接地搜索“fonts”来得到更多关于字体的软件包:

apt search fonts

请注意,当Debian 12正式发布后,可能会有更多的字体包可用,甚至步骤也可能略有不同,所以当Debian 12正式面世后,建议查阅最新的Debian官方文档或社区论坛以获取具体安装步骤和建议。

2.解决了spyder启动时候终端提示的一些错误

终端提示:

libGL error: failed to load driver: nouveau

libGL error: MESA-LOADER: failed to open swrast: /usr/lib/dri/swrast_dri.so

安装了一堆软件,然后,解决了终端提示的错误:

sudo apt install mesa*
conda install -c conda-forge libstdcxx-ng
sudo apt install bumblebee

不知道到底哪个起的作用,可能还有一些。

最后,还剩一个提示错误问题:fromIccProfile: failed minimal tag size sanity

问了一下GPT,回答:

fromIccProfile: failed minimal tag size sanity?错误通常与色彩配置文件(ICC配置文件)处理有关,并不直接与中文显示乱码有关。这个错误可能表明字体渲染库(如FreeType)在处理ICC配置文件时发现了一些不一致或者损坏的数据。

中文显示乱码一般是由于以下一些原因导致的:
1. 没有安装正确的中文字体。
2. 字体配置有误,可能是字体别名设置不正确,或者是优先级的问题。
3. 系统的locale设置不支持中文。

4. 应用程序自身缺少对特定文字编码或字体的支持。

为了解决中文显示乱码的问题,你应该:
1. 确认已经安装了正确的中文字体。
2. 检查并更新字体缓存,通过运行?fc-cache -fv
3. 确保你的系统locale配置包括中文支持,比如?zh_CN.UTF-8

4. 对应用程序进行适当的配置,确保其使用正确的中文字体和编码。

从理论上讲,如果一个字体使用了一个损坏的ICC配置文件,它可能会导致字体渲染出现问题。然而,这通常会影响该字体的外观,比如颜色渲染,而不太可能导致字符显示为乱码。

如果你遇到?fromIccProfile: failed minimal tag size sanity?错误,并且伴随有中文显示问题,两者可能是相互独立的事件。你应该分别针对每一个问题进行调查和修复。对于字体渲染错误,你可能需要确认你的字体文件是否损坏,或者尝试重装字体渲染库。对于中文乱码,你应该按照之前的步骤检查和配置你的字体和locale设置。

应该显示乱码不是这个原因,这个提示错误就先不解决了。

3.百度搜索

找到一段python代码:

from matplotlib import font_manager

fontnamelist = font_manager.get_font_names()
print(fontnamelist)

通过这段代码查看了matplotlib当前系统已经安装的字体。

4.查看字体文件

sudo locate .ttf

5.问文心一言

NotoSans-SemiCondensed.ttf是什么?

NotoSans-SemiCondensed.ttf是谷歌Noto字体家族中的一个半压缩版本的字体文件。Noto是一个支持多种语言的字体家族,旨在为全球用户提供一致的文字体验。这个半压缩版本可能具有更紧凑的字符宽度,适合在有限的空间中使用。

NotoSansLisu-Bold.ttf是什么?

NotoSansLisu-Bold.ttf是谷歌Noto字体家族中的一款粗体版本的Lisu字体文件。Lisu是一种用于Lisu语言的字体,Lisu语言是中国的少数民族语言之一。这个粗体版本可能具有更明显的字重和更强烈的视觉效果,适用于需要突出显示或强调某些文字的场景。

NotoSansMalayalam-Black.ttf是什么?

NotoSansMalayalam-Black.ttf是谷歌Noto字体家族中的一款极粗体版本的马拉雅拉姆语字体文件。这款字体特别适用于需要强烈视觉冲击力或突出显示某些文字的设计中。

谷歌Noto字体家族中中文字体文件是什么?

谷歌Noto字体家族中的中文字体文件是Noto Sans CJK。Noto Sans CJK是一套专为亚洲语言设计的字体,支持包括简体中文、繁体中文、日文和韩文在内的多种语言。

Noto Sans CJK JP是什么意思?

Noto Sans CJK JP指的是Noto Sans CJK字体家族中的日语版本。Noto Sans CJK是一套专为亚洲语言设计的字体,支持包括简体中文、繁体中文、日文和韩文在内的多种语言。其中,JP代表日语版本。

plt.rcParams['font.sans-serif'] = ['Noto Sans CJK JP'] # 指定默认字体 设置这个后,为什么原来中文的乱码就能显示了?

当你在Python的matplotlib库中使用plt.rcParams来设置默认字体为'Noto Sans CJK JP'时,你实际上是在告诉matplotlib使用这种字体来显示文本。

在默认情况下,matplotlib可能并不支持某些语言(例如中文)的字符集,因此当你在图中使用中文时,可能会出现乱码。通过指定'Noto Sans CJK JP'作为默认字体,你告诉matplotlib使用这种字体来显示中文,因为这种字体支持中文字符集。

具体来说,'Noto Sans CJK JP'是谷歌为亚洲语言(包括中文、日文等)提供的一种开源字体。由于这种字体支持中文字符集,因此在使用这种字体作为默认字体后,matplotlib就能正确地显示中文,避免了乱码问题。

当然,确保系统中已经安装了'Noto Sans CJK JP'字体。如果系统中没有这个字体,你可能需要下载并安装它,或者选择其他支持中文的字体。

五、相关链接

Matplotlib绘图如何添加任意字体 - 知乎

Python中使用matplotlib时显示中文乱码_(或更改字体)_matplotlib中文乱码问题-CSDN博客

文章来源:https://blog.csdn.net/eidolon_foot/article/details/135074187
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。