百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Python小技巧——解决matplotlib图表,中文乱码问题

off999 2024-11-25 15:56 21 浏览 0 评论

就在昨天,坐我对面的平台组同事跟前端同事正在疑惑的讨论联调过程中遇到的问题,大概的情形是这样的,后端同事需要将一个报表数据生成图片,然后传给前端展示,听起来感觉是一个不太麻烦也挺简单的需求,但是他们已经讨论了2天,还是没有解决,他们一直认为可能是前后端传输图片数据编码问题,尝试了将数据编码,前端解码,以及其它一些方式,还是存在问题,他们一直想不通,为何本地联调显示没问题,放到服务器上出现中文乱码问题呢?

当我了解以后,我笑着说,这个问题在我漫长的码农生涯中也遇到过,哈哈,让我们好好一起来看看这个问题。

  • 首先,在windows上我们使用如下的代码生成图片
import matplotlib.pyplot as plt 
fig = plt.figure(figsize=(5, 5))  # 定义图并设置画板尺寸
fig.set(alpha=0.2)
ax1 = fig.add_subplot(111)
plt.title('测试图')
plt.xlabel('x标签')
plt.ylabel('y标签')
plt.savefig('test.png')


红色部分的中文被正方形替代,这是matplotlib 自带的字体库不支持中文所致,这里加入下面两行代码调用系统中文字体simhei.ttf文件,当然你也可以使用你想要的中文字体,只要放在正确的位置即可,还有一个办法不用添加代码,需要把下载中文字体>放入 matplotlib 字体库路径>修改 matplotlibrc 文件,也能达到效果,下面使用的是第一种方案

import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = ["SimHei"]  # 设置字体
plt.rcParams["axes.unicode_minus"] = False  # 该语句解决图像中的“-”负号的乱码问题
fig = plt.figure(figsize=(5, 5))  # 定义图并设置画板尺寸
fig.set(alpha=0.2)
ax1 = fig.add_subplot(111)
plt.title('测试图')
plt.xlabel('x标签')
plt.ylabel('y标签')
plt.savefig('test.png')


中文显示正常。


  • 再来看非windows系统,这里用的是centos服务器

使用上面在windows系统中文显示没问题的代码,结果如下


中文还是方块,并且代码还有一个警告

通过警告可以知道,centos系统没有该中文字体。


解决办法

1,在windows的C:\Windows\Fonts目录下找到"SimHei"这个字体文件,显示的名字是“黑体 常规”的名字。

2,将上面的C:\Windows\Fonts\simhei.ttf文件,然后复制到centos服务器的/usr/share/fonts/目录下。

3,清除matplotlib缓存,运行指令rm -rf ~/.cache/matplotlib。

4,再次运行代码结果如下,完美解决



当然你也可以使用你自己想要的字体,没有的字体也可以下载,只要放到上面的目录即可使用。

再啰嗦一点,如果应用是部署在容器里,这里稍微说一下方案,需要在项目文件里包含字体文件,在容器镜像文件里,使用命令将字体文件复制到容器/usr/share/fonts/目录下,增加这两条指令就行。

这次分享就到这了,我同事也顺利解决了问题,希望也能够帮助到大家,期待下次相遇,再见。

相关推荐

python入门到脱坑经典案例—清空列表

在Python中,清空列表是一个基础但重要的操作。clear()方法是最直接的方式,但还有其他方法也可以实现相同效果。以下是详细说明:1.使用clear()方法(Python3.3+推荐)...

python中元组,列表,字典,集合删除项目方式的归纳

九三,君子终日乾乾,夕惕若,厉无咎。在使用python过程中会经常遇到这四种集合数据类型,今天就对这四种集合数据类型中删除项目的操作做个总结性的归纳。列表(List)是一种有序和可更改的集合。允许重复...

Linux 下海量文件删除方法效率对比,最慢的竟然是 rm

Linux下海量文件删除方法效率对比,本次参赛选手一共6位,分别是:rm、find、findwithdelete、rsync、Python、Perl.首先建立50万个文件$testfor...

数据结构与算法——链式存储(链表)的插入及删除,

持续分享嵌入式技术,操作系统,算法,c语言/python等,欢迎小友关注支持上篇文章我们讲述了链表的基本概念及一些查找遍历的方法,本篇我们主要将一下链表的插入删除操作,以及采用堆栈方式如何创建链表。链...

Python自动化:openpyxl写入数据,插入删除行列等基础操作

importopenpyxlwb=openpyxl.load_workbook("example1.xlsx")sh=wb['Sheet1']写入数据#...

在Linux下软件的安装与卸载(linux里的程序的安装与卸载命令)

通过apt安装/协助软件apt是AdvancedPackagingTool,是Linux下的一款安装包管理工具可以在终端中方便的安装/卸载/更新软件包命令使用格式:安装软件:sudoapt...

Python 批量卸载关联包 pip-autoremove

pip工具在安装扩展包的时候会自动安装依赖的关联包,但是卸载时只删除单个包,无法卸载关联的包。pip-autoremove就是为了解决卸载关联包的问题。安装方法通过下面的命令安装:pipinsta...

用Python在Word文档中插入和删除文本框

在当今自动化办公需求日益增长的背景下,通过编程手段动态管理Word文档中的文本框元素已成为提升工作效率的关键技术路径。文本框作为文档排版中灵活的内容容器,既能承载多模态信息(如文字、图像),又可实现独...

Python 从列表中删除值的多种实用方法详解

#Python从列表中删除值的多种实用方法详解在Python编程中,列表(List)是一种常用的数据结构,具有动态可变的特性。当我们需要从列表中删除元素时,根据不同的场景(如按值删除、按索引删除、...

Python 中的前缀删除操作全指南(python删除前导0)

1.字符串前缀删除1.1使用内置方法Python提供了几种内置方法来处理字符串前缀的删除:#1.使用removeprefix()方法(Python3.9+)text="...

每天学点Python知识:如何删除空白

在Python中,删除空白可以分为几种不同的情况,常见的是针对字符串或列表中空白字符的处理。一、删除字符串中的空白1.删除字符串两端的空白(空格、\t、\n等)使用.strip()方法:s...

Linux系统自带Python2&yum的卸载及重装

写在前面事情的起因是我昨天在测试Linux安装Python3的shell脚本时,需要卸载Python3重新安装一遍。但是通过如下命令卸载python3时,少写了个3,不小心将系统自带的python2也...

如何使用Python将多个excel文件数据快速汇总?

在数据分析和处理的过程中,Excel文件是我们经常会遇到的数据格式之一。本文将通过一个具体的示例,展示如何使用Python和Pandas库来读取、合并和处理多个Excel文件的数据,并最终生成一个包含...

【第三弹】用Python实现Excel的vlookup功能

今天继续用pandas实现Excel的vlookup功能,假设我们的2个表长成这样:我们希望把Sheet2的部门匹在Sheet1的最后一列。话不多说,先上代码:importpandasaspd...

python中pandas读取excel单列及连续多列数据

案例:想获取test.xls中C列、H列以后(当H列后列数未知时)的所有数据。importpandasaspdfile_name=r'D:\test.xls'#表格绝对...

取消回复欢迎 发表评论: