Mac/Linux系统matplotlib中文支持问题

背景

matplotlib是python中最常用的数据可视化分析工具,Mac和Linux系统无中文字体,不支持中文显示(希望后续可以改进),需要进行字体的下载和设置才能解决。笔者经过实践,发现Mac系统和Linux系统解决方案略有区别,因此分别记录一下,供读者参考。

Mac系统

详细步骤:

step 1. 网上下载字体SimHei.ttf(已上传到本文资源,点击文章顶部SimHei.ttf进行下载)

step 2. 将字体复制到matplotlib/mpl-data/matplotlibrc/fonts/ttf文件夹下
首先,在mac终端(cmd)输入python,进入python界面,然后输入以下代码查找matplotlib字体路径文件夹

import matplotlib
print(matplotlib.matplotlib_fname())

我输出的路径地址是:
/usr/local/lib/python3.11/site-packages/matplotlib/mpl-data/matplotlibrc

把下载好的SimHei字体拷贝到ttf文件夹里:
/usr/local/lib/python3.11/site-packages/matplotlib/mpl-data/matplotlibrc/fonts/ttf

Mac系统文件夹不好找,方法:按Shift+Command+G,然后输入上述文件地址,点击“前往文件夹”,然后把字体copy到文件夹下

step 3. 修改matplotlibrc配置文件,修改内容如下3项:

font.family:  sans-serif
# 去掉前面的# 
font.sans-serif: SimHei, DejaVu Sans, Bitstream Vera Sans,
# 去掉前面的#,并在冒号后面添加SimHei
axes.unicode_minus: False  # use Unicode for the minus symbol rather than hy    phen.  See
# 去掉前面的#,并将True改为False

 step 4. 删除matplotlib的系统缓存

关闭所有python终端界面,在终端运行如下命令:

rm -rf ~/.matplotlib/*

或者 运行如下命令,查找matlib缓存地址

import matplotlib
print(matplotlib.get_cachedir())

假设输出为/Users/feilong/.matplotlib,运行

rm -rf /Users/feilong/.matplotlib

step 5. 需要重启jupyter notebook kenel,测试是否成功

测试如下代码,如果能够在输出图片中能够显示“中文”,则配置成功。

import matplotlib
import matplotlib.pyplot as plt# from matplotlib import font_manager as fm, rcParams
# plt.rcParams['font.sans-serif']=['SimHei'] # 修改了matplotlibrc后不需要
# plt.rcParams['axes.unicode_minus']=False   # 修改了matplotlibrc后不需要# 创建一个图像
plt.figure()# 添加文本
plt.text(0.5, 0.5, '中文', fontsize=20, fontweight='bold', color='blue')# 显示图像
plt.show()

至此,Mac系统中matplotlib中文显示的问题就解决了 

Linux系统

Linux系统的matplotlib中文支持解决方案和Mac类似,但Linux上可能没有图形化操作界面(特别是服务器),需要使用命令行操作模式。

step1:相同,如果没有浏览器,可以使用wget命令进行下载

step 2. 将字体复制到matplotlib/mpl-data/matplotlibrc/fonts/ttf文件夹下

假设SimHei.ttf字体存放在/mnt/workspace目录下,需要copy到/home/pai/lib/python3.11/site-packages/matplotlib/mpl-data/fonts/ttf/目录下

cp -r /mnt/workspace/SimHei.ttf /home/pai/lib/python3.11/site-packages/matplotlib/mpl-data/fonts/ttf/

step 3. 修改matplotlibrc配置文件,修改内容如下3项

需要使用vim编辑器来打开和编辑配置文件

# 进入文件夹
cd /home/pai/lib/python3.11/site-packages/matplotlib/mpl-data/
# 使用vim 打开配置文件
vim matplotlibrc# 按I键开启insert模式,此时命令行终端出现“INSERT”字样,进行配置修改
# 修改完成按ESC键返回浏览模式
# 按shift+:键,此时命令行终端出现“:”字样,然后输入wq(保存并退出),修改完成

step 4. 删除matplotlib的系统缓存

关闭所有python终端界面,查找缓存地址,在终端运行如下命令:

import matplotlib
print(matplotlib.get_cachedir())

 print输出:/root/.cache/matplotlib ,清除matplotlib缓存

rm -rf /root/.cache/matplotlib

后续步骤相同 

参考文章:

1. https://zhuanlan.zhihu.com/p/449589031

2. Mac系统jupyter notebook中matplotlib中文无法显示的解决办法_notebook plt画图中文不显示-CSDN博客

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

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

相关文章

raw.githubusercontent.com未能解析” 解决方案

1.操作场景 通过windows11 powershell 下载依赖包 2.报错信息如下 irm : 未能解析此远程名称: raw.githubusercontent.com 所在位置 行:1 字符: 27 & ([scriptblock]::Create((irm "https://win11debloat.raphi.re/"))) ~~~~~~~~~…

SpringBoot SSM vue在线作业考试系统

SpringBoot SSM vue在线作业考试系统 首页 图片轮播 作业信息 通知公告 登录注册 留言板 个人中心 我的收藏 后台管理 登录注册 个人中心 教师信息管理 学生信息管理 学院信息管理 专业信息管理 班级信息管理 作业信息管理 作业提交管理 通知公告管理 试卷管理 试题管理 系统…

【C++ 第十八章】C++11 新增语法(4)

前情回顾: 【C11 新增语法(1):1~6 点】 C11出现与历史、花括号统一初始化、initializer_list初始化列表、 auto、decltype、nullptr、STL的一些新变化 【C11 新增语法(2):7~8 点】 右值引用和…

如何使用SpringCloudAliBaba技术栈搭建微服务环境

首先创建一个父模块&#xff08;怎么创建应该就不用多说了吧&#xff0c;重点是依赖这些东西&#xff0c;我这里是大致拿出我其中的一个项目做例子&#xff09; <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSch…

基于ASO-BP原子探索优化BP神经网络实现数据预测Python实现

本文提出了一种基于ASO算法优化BP神经网络的数据预测方法。通过ASO算法对BP神经网络的权值和阈值进行优化&#xff0c;克服了BP神经网络易陷入局部最优解和对初始权值敏感的缺点。实验结果表明&#xff0c;优化后的BP神经网络在预测精度上得到了显著提升&#xff0c;为数据预测…

Go 语言中的接口详解

Go 语言中的接口详解 接口是 Go 语言中实现多态性和松耦合设计的核心概念之一。通过接口&#xff0c;Go 提供了一种简洁而强大的方式来定义对象之间的行为规范&#xff0c;允许不同类型实现相同的接口方法&#xff0c;进而使得代码更加灵活和可扩展。 什么是接口&#xff1f;…

架构基础 -- Web框架之FastAPI

FastAPI&#xff1a;背景与使用案例介绍 FastAPI的背景 FastAPI是一个现代、快速&#xff08;高性能&#xff09;的Web框架&#xff0c;基于Python 3.7编写&#xff0c;利用Python的类型提示&#xff08;type hints&#xff09;来实现自动生成文档和高效的数据验证。由Sebast…

Java 入门指南:Java 并发编程 —— 线程安全问题与锁机制

线程安全的概念 线程安全可以简单理解为在多线程环境下&#xff0c;一个方法或实例在并发执行时能够保持数据的一致性和完整性&#xff0c;不会因为多个线程的交替执行而导致错误的结果。 线程不安全的原因 线程不安全通常由以下几个原因引起&#xff1a; 原子性问题&#x…

ncnn之yolov5(7.0版本)目标检测pnnx部署

一、pnxx介绍与使用 pnnx安装与使用参考&#xff1a; https://github.com/pnnx/pnnxhttps://github.com/Tencent/ncnn/wiki/use-ncnn-with-pytorch-or-onnxhttps://github.com/Tencent/ncnn/tree/master/tools/pnnx 支持python的首选pip&#xff0c;否则就源码编译。 pip3 …

【60天备战软考高级系统架构设计师——第四天:需求获取与初步分析】

软件开发的成功与否往往取决于需求分析的准确性和全面性。今天&#xff0c;我们将深入学习需求获取的各种方法及初步分析的策略&#xff0c;为构建成功的软件项目打下坚实基础。 需求获取方法 需求获取是软件工程中非常重要的阶段&#xff0c;它帮助开发团队深入了解用户的需…

美团8/31—24年秋招【技术】第四场

有10道选择题和3道编程题&#xff0c;选择题以数据结构和计算机网络的知识点为主&#xff0c;编程题只做出了前2道&#xff0c;第三道没时间了&#xff0c;这里记录一下解答过程。 第一题 题目描述 给定一字符串&#xff0c;统计字符串中意大写字母开头的子串的数量&#xf…

mysql实用系列:查询语句开启分页

在 Spring Boot 项目中使用 MyBatis 分页插件&#xff08;PageHelper&#xff09;的步骤如下&#xff1a; 添加依赖&#xff1a;在项目的 pom.xml 文件中添加 PageHelper 的依赖。 <dependency><groupId>com.github.pagehelper</groupId><artifactId>…

Leetcode面试经典150题-36-有效数独升级版-37.解数独

解法都在代码里&#xff0c;不懂就留言或者私信&#xff0c;比第一题稍微难点 public static void solveSudoku(char[][] board) {/**定义三个二维数组分别代表行、列、桶&#xff08;每9个格子&#xff09;*/boolean[][] rowExists new boolean[9][10];boolean[][] colExist…

穿越Java世界的继承奇旅:从基类到子类的华丽蜕变

1.为什么要继承 2.什么是继承以及继承的方式 3.继承的一些语法 4.父类成员的访问 5.关键字super 6.关键字protected 7.关键字final 8.继承与组合 一&#xff1a;为什么要继承 ①代码重用&#xff1a;继承允许我们重用、扩展或修改父类的属性和方法&#xff0c;而无需重…

【linxu】虚拟环境中Python 版本错乱:深入探究 Linux 虚拟环境的识别问题

【linxu】虚拟环境中Python 版本错乱&#xff1a;深入探究 Linux 虚拟环境的识别问题 问题描述&#xff1a;在服务器上&#xff0c;我配置了一个虚拟环境&#xff0c;明确指定使用 Python 3.8 版本。然而&#xff0c;当我激活该环境并检查 Python 版本时&#xff0c;意外地发现…

Golang中的timer和ticker

Golang中的timer和ticker Timer func AppTimer() {// st : time.Now()// // 创建timer&#xff0c;定时2s// timer : time.NewTimer(2 * time.Second)// timer.Stop()// //<-timer.C// timer.Reset(3 * time.Second)// <-timer.C// fmt.Println(time.Since(st))// Afte…

21. Map接口中keySet()、values()和entrySet()方法的区别是什么?它们各自返回什么内容?

在Java中&#xff0c;Map接口提供了keySet()、values()和entrySet()方法&#xff0c;这些方法用于访问Map中的不同部分。下面详细介绍它们的区别以及它们各自返回的内容。 1. keySet() 方法 作用: keySet()方法返回Map中所有键&#xff08;Key&#xff09;的集合。 返回类型: …

OSI七层模型中的数据链路层

图片&#xff1a;数据帧的格式 这里面的一个关键点是&#xff0c;数据的源IP和目标IP在哪里&#xff1f; 就在图中的“数据”里面&#xff0c;这个“数据”也就是网络层的数据包&#xff0c;如果是TCP类型的数据包&#xff0c;数据包里面就包含TCP类型的首部信息&#xff0c;…

实测数据处理(RD算法处理)——SAR成像算法系列(十)

系列文章目录 《SAR学习笔记-SAR成像算法系列&#xff08;一&#xff09;》 《距离多普勒算法&#xff08;RDA&#xff09;-SAR成像算法系列&#xff08;三&#xff09;》 文章目录 一、算法流程 1.1、回波信号生成 1.2、 距离脉冲压缩 1.3、距离徙动校正 1.4、方位脉冲压缩 …

midwayjs 框架使用 rabbitmq 消息延迟

插件rabbitmq_delayed_message_exchange是RabbitMQ官方提供的一种用于实现延迟消息的解决方案。该插件将交换机类型扩展至x-delayed-message&#xff0c;这种类型的交换机能够将消息暂时挂起&#xff0c;直到设定的延迟时间到达&#xff0c;才将消息投递到绑定的队列中。这一特…