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

一、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_managerfontnamelist = 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博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/288841.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

23 聪明的设计

仅用加法的实在是想不出来。。 #include <iostream> using namespace::std; using std::cout; using std::cin; int ljq(int n) {if(n < 1){return n;}else{return (nljq(n-1));} }int main() {int n;cin >> n;std::cout << ljq(n);return 0; }

【MATLAB第85期】基于MATLAB的2023年智能进化算法/元启发式算法合集(持续更新)

【MATLAB第85期】基于MATLAB的2023年智能进化算法/元启发式算法合集&#xff08;持续更新&#xff09; 1.海象进化算法&#xff08;Walrus Optimization Algorithm&#xff09; 作者&#xff1a;Pavel Trojovsk and Mohammad Dehghani 2.暴龙优化算法&#xff08;Tyrannosa…

Go 语言中并发的威力

发挥效率和响应能力 并发是现代软件开发中的一个基本概念&#xff0c;它使程序能够同时执行多个任务&#xff0c;提高效率和响应能力。在本文中&#xff0c;我们将探讨并发在现代软件开发中的重要性&#xff0c;并深入了解 Go 处理并发任务的独特方法。 在现代软件开发中并发…

基于LSTM的情感分析

本文以情感分析为主题&#xff0c;介绍了其在自然语言处理中的重要性以及应用场景。传统的循环神经网络&#xff08;RNN&#xff09;在处理长序列时存在问题&#xff0c;而引入了记忆细胞、输入门、输出门和遗忘门的LSTM模型能够有效解决这一问题。数据集和预处理在机器学习和自…

appium工具相关

一、appium基本介绍 1、appium 基本介绍 定义&#xff1a;appium 就是一款非常流行和好用的第三方工具&#xff0c;通过该工具我们可以配合 python 脚本实现 IOS / Android 多平台的APP 自动化测试。作用&#xff1a;在编写测试脚本的PC机和运行 APP 的真机或设备之前充当一个…

【matlab】绘制横状双组渐变柱状图

【matlab】绘制横状双组渐变柱状图

Open3D 最小二乘拟合平面(直接求解法)

目录 一、算法原理二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。爬虫自重。 一、算法原理 平面方程的一般表达式为: A x + B y + C z

JDK bug:ciObjectFactory::create_new_metadata:原因完全解析

文章目录 1、问题2.详细日志2.关键日志3.结论4.JDK&#xff1a;bug最终bug链接&#xff1a; 京东遇到过类似bug各位大佬如果有更详细的解答可以留言。 1、问题 服务不通&#xff0c;接口404&#xff0c;查看日志有一下截图&#xff0c;还有一个更详细的日志 2.详细日志 # #…

最详细手把手教你安装 Vivado2017.4

软件下载 官网可下载各个版本 百度网盘链接 Vivado2017.4 License 软件安装 解压缩安装包&#xff0c;双击运行安装程序 xsetup.exe&#xff1a; 忽略软件更新&#xff0c;点击 Continue&#xff1a; 点击 Next&#xff1a; 全部勾选 I Agree&#xff0c;点击 Next&#x…

【软件工程】软件工程复习题库2023

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; SpringCloud MybatisPlus JVM 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 软件工程复习题库 一、选择题二、填空题三、判断题四…

LDO的工作原理

LDO&#xff0c;全称是低压差线性稳压器。LDO使用的是在线性区域内运行的晶体管或者场效应管。通过调节晶体管或场效应管两端的电压&#xff0c;产生经过调整过的输出电压。 但仅能使用在降压应用中&#xff0c;也就是输出电压必须小于输入电压。 LDO内部基本都是由4大部件构成…

原子学习笔记3——使用tslib库

一、tslib介绍 tslib 是专门为触摸屏设备所开发的 Linux 应用层函数库&#xff0c;并且是开源。 tslib 为触摸屏驱动和应用层之间的适配层&#xff0c;它把应用程序中读取触摸屏 struct input_event 类型数据&#xff08;这是输入设备上报给应用层的原始数据&#xff09;并进行…