Matplotlib入门系列6_关于Matplotlib中文乱码这回事

博客主要围绕解决Matplotlib中文乱码问题展开。介绍了解决该问题的操作方法,包括下载SimHei.ttf文件、创建test.py文件并编写代码,最后执行test.py。为使用Matplotlib遇到中文乱码的用户提供了解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2019年7月15日14:34:34

环境

Python3.6

前言

Matplotlib的一些基础知识

1、创建
2、简单的plt例子
3、绘图样式的修改
4、一次创建多个子图
5、保存图片
6、关于Matplotlib中文乱码这回事

直接上代码操作,可以体验一下,自己根据自己需要修改即可。
关于实际效果的生成,自己实际运行一下就会显示,截图还是有点麻烦的,就不截图了。

建议刚开始读一下官网对这个库的基本介绍
		英文阅读有点吃力的话,使用谷歌浏览器的谷歌翻译插件,网页全部翻译为中文阅读即可。
官网:
        https://matplotlib.org/tutorials/introductory/usage.html#sphx-glr-tutorials-introductory-usage-py

关于Matplotlib中文乱码这回事


注:
	Matplotlib 会出现中文为"小im方块"无法正常显示的乱码情况,原因大概是由于字体文件不支持中文导致的。
	这里介绍一种解决方法,下边代码标题为中文,执行下边代码可查看执行效果。

操作方法

  • 1、下载SimHei.ttf文件
百度网盘链接:
链接:https://pan.baidu.com/s/1RJxBQIhvRB8Q4kXxOiGvhQ 
提取码:caxj 

下载是一个压缩文件,自行解压后字体文件为SimHei.ttf即可,原字体文件百度网盘分享失败,提示包含敏感信息,只能压缩后分享。
  • 2、创建test.py文件,代码如下
# -*- coding: utf-8 -*-
"""
-------------------------------------------------
   @File:          6、关于中文乱码这回事.py
   @Author :        hyh
   @Ide:            Pycharm
   @Contact:        hyh_youxiang@163.com
   @Date:          19-7-15 上午11:53
   
-------------------------------------------------
   Description :
                   
-------------------------------------------------
"""

import matplotlib.pyplot as plt
import matplotlib.font_manager as fm

"""
为了支持中文防止乱码,需要提前设置这个。
记得本目录下的SimHei.ttf文件
"""
# 支持中文
# plt.rcParams['font.sans-serif'] = ['SimHei.ttf']  # 用来正常显示中文标签
# plt.rcParams['font.serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
myfont = fm.FontProperties(fname='SimHei.ttf')

"""
柱状图
"""


def plt_bar():
    names = ['group_a', 'group_b', 'group_c']
    values = [1, 10, 100]

    plt.figure(figsize=(9, 3))
    plt.bar(names, values)  # 柱状图
    plt.suptitle('柱状图', fontproperties=myfont)
    plt.savefig("柱状图.jpg")  # eps, jpeg, jpg, pdf, pgf, png, ps, raw, rgba, svg, svgz, tif, tiff 都可以

    plt.show()


"""
折线图
"""


def plt_plot():
    names = ['group_a', 'group_b', 'group_c']
    values = [1, 10, 100]
    plt.figure(figsize=(9, 3))

    plt.plot(names, values)  # 折线图
    plt.suptitle('折线图', fontproperties=myfont)
    plt.savefig("折线图.jpg")  # eps, jpeg, jpg, pdf, pgf, png, ps, raw, rgba, svg, svgz, tif, tiff 都可以
    plt.show()


"""
饼状图
"""


def plt_pie():
    # Pie chart, where the slices will be ordered and plotted counter-clockwise:
    labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'
    sizes = [15, 30, 45, 10]
    explode = (0, 0.1, 0, 0)  # only "explode" the 2nd slice (i.e. 'Hogs')

    fig1, ax1 = plt.subplots()
    ax1.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%',
            shadow=True, startangle=90)
    ax1.axis('equal')  # Equal aspect ratio ensures that pie is drawn as a circle.
    plt.suptitle('饼状图', fontproperties=myfont)
    plt.savefig("饼状图.jpg")  # eps, jpeg, jpg, pdf, pgf, png, ps, raw, rgba, svg, svgz, tif, tiff 都可以
    plt.show()


"""
散点图
"""


def plt_scatter():
    names = ['group_a', 'group_b', 'group_c']
    values = [1, 10, 100]

    plt.figure(figsize=(9, 3))

    plt.scatter(names, values)  # 散点图
    plt.suptitle('散点图', fontproperties=myfont)
    plt.savefig("散点图.jpg")  # eps, jpeg, jpg, pdf, pgf, png, ps, raw, rgba, svg, svgz, tif, tiff 都可以
    plt.show()


if __name__ == '__main__':
    plt_bar()
    plt_plot()
    plt_pie()
    plt_scatter()

查看plt字体的标题中文是否显示正确即可。
注:SimHei.ttf和test.py需要在同一个文件夹下。

总结

 实际需要做的就是给Matplotlib 的中文指定下 支持中文的字体文件
	该字体文件这里我用的是下载的Simei.ttf文件,
	放在需要执行的tets.py同目录下
	然后py文件开头添加以下代码

# 1、开头添加以下代码
"""
为了支持中文防止乱码,需要提前设置这个。
记得需要放置在本目录下的SimHei.ttf字体文件
"""
# 支持中文
import matplotlib.font_manager as fm
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
myfont = fm.FontProperties(fname='SimHei.ttf') # 指定本目录下的SimHei.ttf 字体文件

# 2、中间使用中文的地方添加代码
# 需要使用中文的地方需要添加以下代码指定字体文件:
#  添加 fontproperties=myfont 字段
plt.suptitle('散点图', fontproperties=myfont)

如有什么问题欢迎随时提问

共同学习,一起进步

"D:\develop\Python\Python 3.13.2\python.exe" "D:\develop\Python\PythonStudy\《Python数学建模算法与应用》程序和数据\02第2章 Python使用入门\ex2_53.py" D:\develop\Python\PyCharm 2024.3.2\plugins\python-ce\helpers\pycharm_matplotlib_backend\backend_interagg.py:82: UserWarning: Glyph 26376 (\N{CJK UNIFIED IDEOGRAPH-6708}) missing from font(s) DejaVu Sans. D:\develop\Python\PyCharm 2024.3.2\plugins\python-ce\helpers\pycharm_matplotlib_backend\backend_interagg.py:82: UserWarning: Glyph 38075 (\N{CJK UNIFIED IDEOGRAPH-94BB}) missing from font(s) DejaVu Sans. D:\develop\Python\PyCharm 2024.3.2\plugins\python-ce\helpers\pycharm_matplotlib_backend\backend_interagg.py:82: UserWarning: Glyph 30707 (\N{CJK UNIFIED IDEOGRAPH-77F3}) missing from font(s) DejaVu Sans. D:\develop\Python\PyCharm 2024.3.2\plugins\python-ce\helpers\pycharm_matplotlib_backend\backend_interagg.py:82: UserWarning: Glyph 38082 (\N{CJK UNIFIED IDEOGRAPH-94C2}) missing from font(s) DejaVu Sans. D:\develop\Python\PyCharm 2024.3.2\plugins\python-ce\helpers\pycharm_matplotlib_backend\backend_interagg.py:82: UserWarning: Glyph 37329 (\N{CJK UNIFIED IDEOGRAPH-91D1}) missing from font(s) DejaVu Sans. D:\develop\Python\PyCharm 2024.3.2\plugins\python-ce\helpers\pycharm_matplotlib_backend\backend_interagg.py:85: UserWarning: Glyph 26376 (\N{CJK UNIFIED IDEOGRAPH-6708}) missing from font(s) DejaVu Sans. D:\develop\Python\PyCharm 2024.3.2\plugins\python-ce\helpers\pycharm_matplotlib_backend\backend_interagg.py:85: UserWarning: Glyph 38075 (\N{CJK UNIFIED IDEOGRAPH-94BB}) missing from font(s) DejaVu Sans. D:\develop\Python\PyCharm 2024.3.2\plugins\python-ce\helpers\pycharm_matplotlib_backend\backend_interagg.py:85: UserWarning: Glyph 30707 (\N{CJK UNIFIED IDEOGRAPH-77F3}) missing from font(s) DejaVu Sans. D:\develop\Python\PyCharm 2024.3.2\plugins\python-ce\helpers\pycharm_matplotlib_backend\backend_interagg.py:85: UserWarning: Glyph 38082 (\N{CJK UNIFIED IDEOGRAPH-94C2}) missing from font(s) DejaVu Sans. D:\develop\Python\PyCharm 2024.3.2\plugins\python-ce\helpers\pycharm_matplotlib_backend\backend_interagg.py:85: UserWarning: Glyph 37329 (\N{CJK UNIFIED IDEOGRAPH-91D1}) missing from font(s) DejaVu Sans. 进程已结束,退出代码为 0
最新发布
03-17
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hyh123a

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值