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

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博客

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Java中类的成员介绍
  • 设计模式-结构性模式
  • Elasticsearch 里的父子文档插入和查询
  • upload-labs通关攻略
  • jetson orin nx安装todesk
  • Matlab三维图的坐标轴标签 自动平行坐标/自动旋转
  • Android耗电优化,如何定位问题,如何修改
  • Unity学习路线
  • vscode上传自己开发的npm包
  • 哈希表(模拟实现)
  • Linux基础指令(2)
  • Mysql 巧秒避开 varchar 类型的 max()、min() 函数的坑
  • CSS中响应式设计
  • 利用衍射进行材料分析--Muad
  • 【Java】—— Java面向对象进阶:Java中的多态、继承与类型判断- instanceof 操作符与方法重载的模拟
  • 11111111
  • 30秒的PHP代码片段(1)数组 - Array
  • Android框架之Volley
  • ES6--对象的扩展
  • Flannel解读
  • JavaScript学习总结——原型
  • PermissionScope Swift4 兼容问题
  • Python_网络编程
  • Spring Boot快速入门(一):Hello Spring Boot
  • unity如何实现一个固定宽度的orthagraphic相机
  • vue-router的history模式发布配置
  • webpack4 一点通
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 前端代码风格自动化系列(二)之Commitlint
  • 数据可视化之 Sankey 桑基图的实现
  • 双管齐下,VMware的容器新战略
  • 我与Jetbrains的这些年
  • 做一名精致的JavaScripter 01:JavaScript简介
  • ​油烟净化器电源安全,保障健康餐饮生活
  • #mysql 8.0 踩坑日记
  • #Ubuntu(修改root信息)
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (¥1011)-(一千零一拾一元整)输出
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (阿里云万网)-域名注册购买实名流程
  • (办公)springboot配置aop处理请求.
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (接口封装)
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .NET成年了,然后呢?
  • .NET和.COM和.CN域名区别
  • /usr/bin/perl:bad interpreter:No such file or directory 的解决办法