当前位置: 首页 > news >正文

在 Ubuntu 使用 fonts-noto-cjk 设置 Matplotlib 支持中文的完整教程

在 Ubuntu 使用 fonts-noto-cjk 设置 Matplotlib 支持中文的完整教程

    • 1. 为什么需要配置中文字体?
    • 2. 安装 `fonts-noto-cjk`
      • 安装命令:
      • 检查字体安装是否成功
    • 3. 配置 Matplotlib 支持中文
      • 3.1 手动加载字体
      • 3.2 设置全局字体(可选)
        • 修改 Matplotlib 全局配置
    • 4. 清理字体缓存(解决配置问题)
    • 5. 常见问题与解决方法
      • 问题 1:找不到 `Noto Sans CJK` 字体
      • 问题 2:仍显示乱码或方块
      • 问题 3:路径错误
    • 6. 总结
      • 完整代码:

在使用 Python 的可视化库如 Matplotlib 绘图时,如果数据包含中文,经常会遇到中文显示为乱码或不显示的情况。这篇文章将详细介绍如何在 Ubuntu 系统中安装 fonts-noto-cjk 中文字体,并在 Matplotlib 中正确显示中文。


1. 为什么需要配置中文字体?

Matplotlib 默认使用的字体通常不支持中文,而中文内容会显示为方块或乱码。通过安装并配置支持中文的字体,如 Google 的开源字体 Noto Sans CJK,我们可以轻松解决这个问题。


2. 安装 fonts-noto-cjk

fonts-noto-cjk 是 Google 提供的高质量开源字体,支持中文、日文和韩文字符。在 Ubuntu 中安装非常简单:

安装命令:

打开终端,输入以下命令:

sudo apt update
sudo apt install fonts-noto-cjk

检查字体安装是否成功

安装完成后,使用以下命令检查字体是否成功安装:

fc-list | grep "Noto Sans CJK"

输出中应包含类似以下内容:

/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc: Noto Sans CJK SC

如果能看到上述结果,说明字体安装成功。


3. 配置 Matplotlib 支持中文

3.1 手动加载字体

通过 Matplotlib 的 font_manager.FontProperties 指定字体路径:

from matplotlib import font_manager
import matplotlib.pyplot as plt# 设置字体路径
font_path = '/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc'  # 确保路径正确
font_prop = font_manager.FontProperties(fname=font_path)# 测试中文显示
plt.title("测试中文显示", fontproperties=font_prop)
plt.xlabel("横轴", fontproperties=font_prop)
plt.ylabel("纵轴", fontproperties=font_prop)
plt.plot([1, 2, 3], [4, 5, 6])
plt.show()

运行以上代码后,你应该会看到正常显示的中文标题和坐标标签。


3.2 设置全局字体(可选)

如果不想每次都手动指定字体,可以将其配置为 Matplotlib 的全局字体。以下是方法:

修改 Matplotlib 全局配置
import matplotlib.pyplot as plt
from matplotlib import rcParams# 设置全局字体
rcParams['font.sans-serif'] = ['Noto Sans CJK SC']  # 使用简体中文字体
rcParams['axes.unicode_minus'] = False  # 解决负号显示问题# 测试中文显示
plt.title("测试全局中文字体")
plt.xlabel("横轴")
plt.ylabel("纵轴")
plt.plot([1, 2, 3], [4, 5, 6])
plt.show()

通过这种方式,所有的 Matplotlib 图表都将默认使用指定的中文字体。


4. 清理字体缓存(解决配置问题)

如果你遇到字体未生效的情况,可以清理 Matplotlib 的字体缓存并重新加载:

rm -rf ~/.cache/matplotlib

运行上述命令后,重新运行代码,Matplotlib 将重新加载系统字体。


5. 常见问题与解决方法

问题 1:找不到 Noto Sans CJK 字体

确保字体已安装成功,运行以下命令检查:

fc-list | grep "Noto Sans"

如果没有结果,尝试重新安装字体:

sudo apt install fonts-noto-cjk
sudo fc-cache -fv

问题 2:仍显示乱码或方块

清理字体缓存后重新运行代码:

rm -rf ~/.cache/matplotlib

问题 3:路径错误

检查 NotoSansCJK-Regular.ttc 文件的实际路径:

fc-list | grep "NotoSansCJK"

确保路径正确后更新代码中的 font_path


6. 总结

通过安装 fonts-noto-cjk 字体并正确配置 Matplotlib,我们可以轻松解决中文显示问题。以下是完整代码的总结:

完整代码:

from matplotlib import font_manager
import matplotlib.pyplot as plt# 设置字体路径
font_path = '/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc'
font_prop = font_manager.FontProperties(fname=font_path)# 测试中文显示
plt.title("测试中文显示", fontproperties=font_prop)
plt.xlabel("横轴", fontproperties=font_prop)
plt.ylabel("纵轴", fontproperties=font_prop)
plt.plot([1, 2, 3], [4, 5, 6])
plt.show()

通过以上方法,Matplotlib 在 Ubuntu 系统中完美支持中文,再也不用担心乱码啦!希望这篇教程能帮到你,祝你绘图愉快! 🎉

相关文章:

在 Ubuntu 使用 fonts-noto-cjk 设置 Matplotlib 支持中文的完整教程

在 Ubuntu 使用 fonts-noto-cjk 设置 Matplotlib 支持中文的完整教程 1. 为什么需要配置中文字体?2. 安装 fonts-noto-cjk安装命令:检查字体安装是否成功 3. 配置 Matplotlib 支持中文3.1 手动加载字体3.2 设置全局字体(可选)修改…...

《C++ Primer Plus》学习笔记|第10章 对象和类 (24-12-2更新)

文章目录 10.3 类的构造函数和析构函数10.3.2 使用构造函数显式地调用构造函数隐式地调用构造函数使用对象指针 10.3.3默认构造函数10.3.4 析构函数析构函数示例 10.4 this指针三个const的作用 10.5 对象数组10.6 类作用域10.9 复习题1.什么是类?2.类如何实现抽象、…...

SpringMVC接收数据

一、访问路径设置: RequestMapping注解的作用就是将请求的URL地址和处理请求的方式(handler方法)关联起来,建立映射关系;SpringMVC接收到指定的请求,就会来找到在映射关系中对应的方法来处理这个请求 1.精准路径匹配: 在RequestMapping注解指定URL地址…...

Python数组拆分(array_split())

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…...

Git 使用总结

下载 git bash:http://git-scm.com/download/win 第一次使用 git 时,配置用户信息: git config --global user.email "your.emailexample.com" 从github仓库中下载项目到本地,修改后重新上传: git clone 项…...

NaviveUI框架的使用 ——安装与引入(图标安装与引入)

文章目录 概述安装直接引入引入图标样式库 概述 🍉Naive UI 是一个轻量、现代化且易于使用的 Vue 3 UI 组件库,它提供了一组简洁、易用且功能强大的组件,旨在为开发者提供更高效的开发体验,特别是对于构建现代化的 web 应用程序。…...

YOLOv11 NCNN安卓部署

YOLOv11 NCNN安卓部署 之前自己在验证更换relu激活函数重新训练部署模型的时候,在使用ncnn代码推理验证效果很好,但是部署到安卓上cpu模式会出现大量的错误检测框,现已更换会官方默认的权重 前言 YOLOv11 NCNN安卓部署 目前的帧率可以稳定…...

多线程安全单例模式的传统解决方案与现代方法

在多线程环境中实现安全的单例模式时,传统的双重检查锁(Double-Checked Locking)方案和新型的std::once_flag与std::call_once机制是两种常见的实现方法。它们在实现机制、安全性和性能上有所不同。 1. 传统的双重检查锁方案 双重检查锁&am…...

golang debug调试

1. 本地调试 1:Add Configurations 添加配置文件(Run kind :Directory) 2:进入run运行窗口 3:debug断点调试模式 1. Resume Program (继续运行) 图标: ▶️ 或 ► 快捷键: F9(Windows/Linux&a…...

安装 RabbitMQ 服务

安装 RabbitMQ 服务 一. RabbitMQ 需要依赖 Erlang/OTP 环境 (1) 先去 RabbitMQ 官网,查看 RabbitMQ 需要的 Erlang 支持:https://www.rabbitmq.com/ 进入官网,在 Docs -> Install and Upgrade -> Erlang Version Requirements (2) …...

pandas 大数据获取某列所有唯一值

目录 方法1: 方法2: 方法3 处理大数据: 方法1: data.groupby().groups.keys() import pandas as pd# 假设我们有以下的数据 data = {RTDR_name: [A, B, A, C, B, A],value: [1, 2, 3, 4, 5, 6] }# 创建 DataFrame temp_data = pd.DataFrame(data)# 获取 RTDR_name 列的…...

【AI系统】LLVM 架构设计和原理

LLVM 架构设计和原理 在上一篇文章中,我们详细探讨了 GCC 的编译过程和原理。然而,由于 GCC 存在代码耦合度高、难以进行独立操作以及庞大的代码量等缺点。正是由于对这些问题的意识,人们开始期待新一代编译器的出现。在本节,我们…...

Node.js 中的文件系统(fs)模块详解与代码示例

Node.js 中的文件系统(fs)模块详解与代码示例 Node.js 的 fs 模块提供了与文件系统交互的能力,包括文件的读写、目录的管理等。以下是 fs 模块中一些常用方法的详细解释和代码示例: 1. 异步读取文件内容 作用:异步读…...

TinyXML2的一些用法

TinyXML2 原始字符串字面量 TinyXML21. XML文档操作1.1 LoadFile(const char* filename)1.2SaveFile(const char* filename)1.3RootElement()1.4Parse(const char* xml) 2.元素操作2.1 FirstChildElement(const char* name nullptr)2.2 NextSiblingElement(const char* name …...

【Vue3】从零开始创建一个VUE项目

【Vue3】从零开始创建一个VUE项目 手动创建VUE项目附录 package.json文件报错处理: Failed to get response from https://registry.npmjs.org/vue-cli-version-marker 相关链接: 【VUE3】【Naive UI】<NCard> 标签 【VUE3】【Naive UI】&…...

springboot370高校宣讲会管理系统(论文+源码)_kaic

毕 业 设 计(论 文) 高校宣讲会管理系统设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此&#xff0c…...

navicat连接mysql 8.0以上版本2059错误

安装了最新版本8.0.4的mysql之后,使用navicat链接提示以下错误。原因是因为mysql8.0 之前的版本中加密规则是 mysql_native_password,而 mysql8.0 之后的版本加密规则是caching_sha2_password 处理方案 解决方案1:下载安装最新版本navicat…...

SQL优化与性能——C++与SQL性能优化

在开发高效的数据库应用程序时,性能优化至关重要,尤其是当系统规模逐渐扩大或并发请求增加时。数据库操作往往是应用程序性能的瓶颈所在,因此,在 C 应用程序中合理优化数据库操作,管理数据库连接池、使用批量插入与更新…...

AI高中数学教学视频生成技术:利用通义千问、MathGPT、视频多模态大模型,语音大模型,将4个模型融合 ,生成高中数学教学视频,并给出实施方案。

大家好,我是微学AI,今天给大家介绍一下AI高中数学教学视频生成技术:利用通义千问、MathGPT、视频多模态大模型,语音大模型,将4个模型融合 ,生成高中数学教学视频,并给出实施方案。本文利用专家模…...

vscode远程连接ssh

一. 使用vscode里的ssh查件连不上远程的解决方法 删除Windows上的known_host文件,该文件会在连接之后自动生成,用于验证远程服务器的身份。 konwn_host和id_rsa,id_rsa.pub的关系 (1)konwn_host用于客户端验证远程服务…...

学习ASP.NET Core的身份认证(基于Session的身份认证2)

基于Session的身份认证通过后,后续访问控制器的函数时该如何控制访问权限?虽然可以按上篇文章方式在需要做控制的函数开头检查Session的用户标识,可以写个全局通用检查类供所需函数调用,但还是有更简便的方法,本文学习…...

深度学习基本单元结构与输入输出维度解析

深度学习基本单元结构与输入输出维度解析 在深度学习领域,模型的设计和结构是理解其性能和应用的关键。本文将介绍深度学习中的基本单元结构,包括卷积神经网络(CNN)、反卷积(转置卷积)、循环神经网络&…...

playwright 学习复仇记-1 开端

前言 说到 web 自动化,大家最熟悉的就是 selenium 了,selenium 之后又出现了三个强势的框架Puppeteer、CyPress、TestCafe, 但这3个都需要掌握 JavaScript 语言,所以只是少部分人在用。 2020年微软开源一个 UI 自动化测试工具 Pl…...

从零开始使用GOT-OCR2.0——多模态OCR项目:微调数据集构建 + 训练(解决训练报错,成功实验微调训练)

在上一篇文章记录了GOT-OCR项目的环境配置和基于官方模型参数的基础使用。环境安装的博文快速链接: 从零开始使用GOT-OCR2.0——多模态通用型OCR(非常具有潜力的开源OCR项目):项目环境安装配置 测试使用-CSDN博客 本章在环境配置…...

Rust学习笔记_10——守卫

Rust学习笔记_07——枚举和范围 Rust学习笔记_08——String Rust学习笔记_09——模式匹配 守卫 文章目录 守卫1. 介绍2. 基本用法3. 示例4. 复杂用法5. if let5.1 基本用法5.2 示例5.3 守卫与if let的区别与联系 1. 介绍 在Rust中,守卫(guard&#xff…...

UE5 打包报错 Unknown structure 的解决方法

在虚幻引擎5.5 打包报错如下: UATHelper: 打包 (Windows): LogInit: Display: LogProperty: Error: FStructProperty::Serialize Loading: Property ‘StructProperty /Game/Components/HitReactionComponent/Blueprints/BI_ReactionInterface.BI_ReactionInterface…...

如何打开链接中的网址

文章目录 1 概念介绍2 使用方法3 示例代码我们在上一章回中介绍了包管理相关的内容,本章回中将介绍如何使用url_launcher包.闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 我们在这里介绍url_launcher包主要用来打开Url中的内容,Url可以是电话号码,网址,邮箱等内容。如…...

React 前端框架4

六、React 中的事件处理 (一)绑定事件的方式 在 React 中,事件绑定和传统的 HTML 中的事件绑定有一些不同,它采用了驼峰命名法来命名事件名称,并且事件绑定的属性值是一个函数。例如,在 HTML 中绑定点击事…...

Neo4j启动时指定JDK版本

项目使用jdk1.8,同时需要安装neo4j5.15版本,使用jdk17. 1.mac或者liunx,找到neo4j目录bin的下neo4j文件 设置JAVA_HOME: 2.windows,找到bin下面的neo4j.bat文件 set "JAVA_HOME{JDK文件目录}" 重启后生效。...

【k8s深入理解之 Scheme 补充-2】理解 register.go 暴露的 AddToScheme 函数

AddToScheme 函数 AddToScheme 就是为了对外暴露,方便别人调用,将当前Group组的信息注册到其 Scheme 中,以便了解该 Group 组的数据结构,用于后续处理 项目版本用途使用场景k8s.io/apiV1注册资源某一外部版本数据结构&#xff0…...

TextBlob:简单高效的自然语言处理工具

TextBlob:简单高效的自然语言处理工具 TextBlob 是一个基于 NLTK 和 Pattern 的自然语言处理库,以简单易用著称。它提供了直观的 API,支持文本分析、情感分析、拼写纠正等常见任务,非常适合快速原型开发和学习。 为什么选择 Text…...

QT:将QTableWidget内容写入txt文件中

文章详请:最近在做手在眼上的标定,首先要采集机械臂数据和图像数据,我使用tablewidget进行机械臂数据的显示,最后的计算需要将机械臂位姿数据存储在txt文件中。 引用:Qt如何保存tableWidget数据?_qt table…...

每日十题八股-2024年12月2日

1.你知道有哪个框架用到NIO了吗? 2.有一个学生类,想按照分数排序,再按学号排序,应该怎么做? 3.Native方法解释一下 4.数组与集合区别,用过哪些? 5.说说Java中的集合? 6.Java中的线程…...

R语言森林生态系统结构、功能与稳定性分析与可视化实践高级应用

在生态学研究中,森林生态系统的结构、功能与稳定性是核心研究内容之一。这些方面不仅关系到森林动态变化和物种多样性,还直接影响森林提供的生态服务功能及其应对环境变化的能力。森林生态系统的结构主要包括物种组成、树种多样性、树木的空间分布与密度…...

RDMA驱动学习(三)- cq的创建

用户通过ibv_create_cq接口创建完成队列,函数原型和常见用法如下,本节以该用法为例看下cq的创建过程。 struct ibv_cq *ibv_create_cq(struct ibv_context *context, int cqe,void *cq_context,struct ibv_comp_channel *channel,int comp_vector); cq …...

Python-使用类和实例-Sun-Mon

9.2.1 Car类 class Car():"""概述车辆信息"""def __init__(self,make,model,year):"""初始化参数"""self.makemakeself.modelmodelself.yearyear //__init__方法会把依据Car类创建的实例传入的实参的值&#xff…...

【MIT-OS6.S081笔记0.5】xv6 gdb调试环境搭建

补充一下xv6 gdb调试环境的搭建,我这里装的是最新的15.2的gdb的版本。我下载的是下面的第二个xz后缀的文件: 配置最详细的步骤可以参考下面的文章: [MIT 6.S081] Lab 0: 实验配置, 调试及测试 这里记录一下踩过的一些报错: 文…...

vmware虚拟机移植

最近发现虚拟机的系统非常适合移植,接下来看一下具体的过程 复制vmdk 第一个重要的文件是保存vmdk,如果磁盘使用的是多个文件则最好进行合并一下(用着用着会发现vmdk文件特别大,这是正常的,不要想着能压缩了&#xf…...

最大子数组和

给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组 是数组中的一个连续部分。 示例 1: 输入:nums [-2,1,-3,4,-1,2,1,-5,4] 输出&#xff…...

活着就好20241202

亲爱的朋友们,大家早上好!今天是2024年12月2日,第49周的第一天,也是十二月的第二天,农历甲辰[龙]年十月三十。在这个全新月份的开始、阳光初升的清晨,愿第一缕阳光悄悄探进你的房间,带给你满满的…...

Scala的练习题(成绩计算)

//1.迭代器,跳过第一个元素 //2.把字符串转成数字 //3.如何判断一个正整数是否可以被三整除? (123) % 3 0 import wyyyy.Studentimport scala.collection.mutable.ListBuffer import scala.io.Sourcecase class Student(name: St…...

Docker中配置Mysql主从备份

Mysql配置主从备份 一、Docker中实现跨服务器主从备份二、配置步骤1.配置主库2.配置从库3.遇到问题3.其它使用到的命令 一、Docker中实现跨服务器主从备份 在 Docker 中配置 MySQL 主从备份主要通过 MySQL 主从复制实现 二、配置步骤 1.配置主库 # 进入mysql主库容器 docke…...

分布式通用计算——MapReduce(重点在shuffle 阶段)

图片均来源于B站:哈喽鹏程 面向批处理的分布式计算框架——MapReduce 1、Mapreduce 起源2、适用场景3、MapReduce 词频统计原理 1、Mapreduce 起源 2、适用场景 3、MapReduce 词频统计原理 map 阶段到reduce阶段,通过hash取模来实现reduce 。比如&…...

VMware三种网络模式(桥接、NAT模式、仅主机)模式说明

VMware三种网络模式(桥接、NAT模式、仅主机)模式说明 VMware 提供了三种主要的网络连接模式:桥接模式(Bridged Mode)、NAT模式(Network Address Translation Mode)和仅主机模式(Hos…...

实习冲刺第三十八天

236.二叉树的最近公共祖先 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff0…...

[Linux] 信号(singal)详解(一)

标题:[Linux] 信号(singal)详解 水墨不写bug (图片来源于网络) 目录 一、认识信号 1、认识信号 2、信号特点 3、基本概念 二、信号的产生(5种方式) 三、信号的保存 正文开始: 一、认识信号 1、认识信…...

【设计模式系列】备忘录模式(十九)

目录 一、什么是备忘录模式 二、备忘录模式的角色 三、备忘录模式的典型应用场景 四、备忘录模式在Calendar中的应用 一、什么是备忘录模式 备忘录模式(Memento Pattern)是一种行为型设计模式,它允许在不暴露对象内部状态的情况下保存和恢…...

书生大模型实战营第4期——3.3 LMDeploy 量化部署实践

文章目录 1 基础任务2 配置LMDeploy环境2.1 环境搭建2.2 模型配置2.3 LMDeploy验证启动模型文件 3 LMDeploy与InternLM2.53.1 LMDeploy API部署InternLM2.53.1.1 启动API服务器3.1.2 以命令行形式连接API服务器3.1.3 以Gradio网页形式连接API服务器 3.2 LMDeploy Lite3.2.1 设置…...

11.28深度学习_bp算法

七、BP算法 多层神经网络的学习能力比单层网络强得多。想要训练多层网络,需要更强大的学习算法。误差反向传播算法(Back Propagation)是其中最杰出的代表,它是目前最成功的神经网络学习算法。现实任务使用神经网络时,…...

U盘文件夹变打不开的文件:深度解析、恢复策略与预防之道

一、U盘文件夹变打不开的文件现象解析 在日常使用U盘的过程中,我们时常会遇到这样的困扰:原本存储有序、可以轻松访问的文件夹,突然之间变成了无法打开的文件。这些文件通常以未知图标或乱码形式显示,双击或右键尝试打开时&#…...