Matplotlib中文乱码的3种解决方案

 更新时间:2018年11月15日 10:04:41   作者:标点符  
当我们用matplotlib作图时,往往会发现中文的文字变成了小方块,我在绘制决策树的时候就碰到了这个问题。下面这篇文章主要给大家总结介绍了关于Matplotlib中文乱码的3种解决方案,需要的朋友可以参考下

前言

Matplotlib是一个Python 2D绘图库,它可以在各种平台上以各种硬拷贝格式和交互式环境生成出具有出版品质的图形。 Matplotlib可用于Python脚本,Python和IPython shell,Jupyter笔记本,Web应用程序服务器和四个图形用户界面工具包。

然而最近在使用matplotlib默认情况会出现乱码问题,原则上matplotlib是支持中文的,只是在配置信息里没有中文字体的相关信息。

解决方法如下:

解决方案一:修改配置文件

matplotlib 从配置文件 matplotlibrc 中读取配置,字体相关内容也在其中。查询当前matplotlibrc 所在目录,可以用 get_configdir()函数:

import matplotlib
matplotlib.get_configdir()

通常存放位置:lib\site-packages\matplotlib\mpl-data\matplotlibrc

涉及到字体部分的设置内容为:

#font.family : sans-serif
#font.style : normal
#font.variant : normal
#font.weight : normal
#font.stretch : normal
## note that font.size controls default text sizes. To configure
## special text sizes tick labels, axes, labels, title, etc, see the rc
## settings for axes and ticks. Special text sizes can be defined
## relative to font.size, using the following values: xx-small, x-small,
## small, medium, large, x-large, xx-large, larger, or smaller
#font.size : 10.0
#font.serif : DejaVu Serif, Bitstream Vera Serif, Computer Modern Roman, New Century Schoolbook, Century Schoolbook L, Utopia, ITC Bookman, Bookman, Nimbus Roman No9 L, Times New Roman, Times, Palatino, Charter, serif
#font.sans-serif : DejaVu Sans, Bitstream Vera Sans, Computer Modern Sans Serif, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif
#font.cursive : Apple Chancery, Textile, Zapf Chancery, Sand, Script MT, Felipa, cursive
#font.fantasy : Comic Sans MS, Chicago, Charcoal, ImpactWestern, Humor Sans, xkcd, fantasy
#font.monospace : DejaVu Sans Mono, Bitstream Vera Sans Mono, Computer Modern Typewriter, Andale Mono, Nimbus Mono L, Courier New, Courier, Fixed, Terminal, monospace

matplotlib 默认使用的 font.family 是 sans-serif,即无衬线字体,可以看到在font.sans-serif中设置的全部为西文字体,这里的设置和css样式文件中设置差不多,只需要添加系统存在的字体名称即可(需要注意的是,matplotlib:

只支持ttf格式的字体),设置时需要将注释符号#去除。

解决方案二:重载配置文件

import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['font.serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题,或者转换负号为字符串

解决方案三:自定义字体

import numpy as np
import pylab as pl
import matplotlib.font_manager as fm

myfont = fm.FontProperties(fname=r'D:\Fonts\simkai.ttf') # 设置字体
t = np.arange(0.0,2.0 * np.pi,0.01) # 自变量取值范围
s = np.sin(t) # 计算正弦函数值
z = np.cos(t) # 计算余弦函数值
pl.plot(t,s,label='正弦')
pl.plot(t,z,label='余弦')
pl.xlabel('x-变量',fontproperties=myfont,fontsize=24) #设置标签
pl.ylabel('y-正弦余弦函数值',fontproperties=myfont,fontsize=24)
pl.title('sin-cos函数图像',fontproperties=myfont,fontsize=32) #图像标题
pl.legend(prop=myfont)
pl.show()

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • Python使用asyncio包处理并发详解

    Python使用asyncio包处理并发详解

    这篇文章主要为大家详细介绍了Python使用asyncio包处理并发的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-09-09
  • 关于numpy数组轴的使用详解

    关于numpy数组轴的使用详解

    今天小编就为大家分享一篇关于numpy数组轴的使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • python遍历文件夹找出文件夹后缀为py的文件方法

    python遍历文件夹找出文件夹后缀为py的文件方法

    今天小编就为大家分享一篇python遍历文件夹找出文件夹后缀为py的文件方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • python中列表(list)和元组(tuple)的深入讲解

    python中列表(list)和元组(tuple)的深入讲解

    这篇文章主要给大家介绍了关于python中列表(list)和元组(tuple)的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • python3 cookbook解压可迭代对象赋值给多个变量的问题及解决方案

    python3 cookbook解压可迭代对象赋值给多个变量的问题及解决方案

    这篇文章主要介绍了python3 cookbook-解压可迭代对象赋值给多个变量,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-01-01
  • conda install nb_conda失败原因分析及解决

    conda install nb_conda失败原因分析及解决

    这篇文章主要给大家介绍了关于conda install nb_conda失败原因分析及解决方法,conda install nb_conda显示错误的原因可能有很多,具体原因取决于你的系统环境和安装的conda版本,需要的朋友可以参考下
    2023-11-11
  • 探索 Python Restful 接口测试的奥秘

    探索 Python Restful 接口测试的奥秘

    掌握Python Restful 接口测试,让你的后端服务像流水一样顺畅,本指南将带你轻松穿梭于断言和请求之间,搞定所有测试难题,一起来看,让代码在你的指尖跳舞吧!
    2023-12-12
  • Python模块pexpect安装及使用流程

    Python模块pexpect安装及使用流程

    Pexpect使Python成为控制其他应用程序的更好工具,这篇文章主要介绍了Python模块之pexpect的安装及使用流程,需要的朋友可以参考下
    2022-02-02
  • 详解Python如何使用Self类型实现返回类的实例对象

    详解Python如何使用Self类型实现返回类的实例对象

    在 Python 中,类方法通常会返回类的实例对象,本文将详细介绍如何在 Python 中使用 Self 类型来返回类的实例对象,并提供丰富的示例代码帮助更好地理解,快跟随小编一起学习起来吧
    2024-02-02
  • 利用Python画ROC曲线和AUC值计算

    利用Python画ROC曲线和AUC值计算

    这篇文章给大家介绍了如何利用Python画ROC曲线,以及AUC值的计算,有需要的朋友们可以参考借鉴,下面来一起看看吧。
    2016-09-09

最新评论