Python学习之matplotlib库-显示中文

标签: python学习  #python库详解

目录

一. 直接修改配置文件matplotlibrc

二.在运行的程序中添加代码

(一)matplotlib 动态修改配置

(二)matplotlib 设置自定义字体


matplotlib在绘图时,会显示中文为方块,主要原因有:   1.matplotlib 字体问题;2.seaborn 字体问题

实际上,matplotlib是支持unicode编码的,中文乱码得主要问题是没有找到合适的中文字体,在matplotlib的配置文件中,可以看到字体的默认设置如下:
  #font.family : sans-serif
  #font.sans-serif : Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif
并没有中文字体,所以我们只要手动添加中文字体的名称就可以了,不过并不是添加我们熟悉的“宋体”或“黑体”这类的名称,而是要添加字体管理器识别出的字体名称,matplotlib自身实现的字体管理器在文件font_manager.py中,自动生成的可用字体信息在保存在文件fontList.cache里,可以搜索这个文件查看对应字体的名称,例如simhei.ttf对应的名称为’SimHei’,simkai.ttf对应的名称为’KaiTi_GB2312’等。因此我们只要把这些名称添加到配置文件中去就可以让matplotlib显示中文,修改的方法有两种:

一. 直接修改配置文件matplotlibrc

 1.在配置文件中找到font.sans-serif的设置,然后添加需要的中文字体名称,例如:
  font.sans-serif : SimHei, Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif

    例如:mpl.rcParams['font.sans-serif'] = ['SimHei']

  2.但是如果我们横坐标有负半轴得值,‘-'值得话,我们得符号会不见,很明显,这不是程序的错误,而是由于更改了字体导致显示不出负号,

  在配置文件中我们可以在axes相关设置里找到如下设置:
   #axes.unicode_minus : True
  可见默认情况下采用的是unicode的minus,看来我们选择的字体对这点支持不够,所以只要把它设置为False就可以了

  例如:mpl.rcParams['axes.unicode_minus'] = False

 

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

import seaborn as sns
sns.set_style("darkgrid",{"font.sans-serif":['KaiTi', 'Arial']})   #这是方便seaborn绘图得时候得字体设置

运行效果展示:

      

   

二.在运行的程序中添加代码

(一)matplotlib 动态修改配置

  代码和第一部分的前半部分一致

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

(二)matplotlib 设置自定义字体

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()

运行结果展示:

         

win自带字体库路径

  • C:\Windows\Fonts\ 内含大量字体
  • 注意在该文件夹下,字体文件的名字和其他文件夹下显示的不一致,请使用右键属性-常规中文件名,或者使用拷贝到其他文件夹后显示的字体文件名字

参考

  • Matplotlib输出中文显示问题,内含mac操作系统字体库https://my.oschina.net/u/1180306/blog/279818
  • github的帖子,pandas无法显示中文的问题https://github.com/mwaskom/seaborn/issues/1009
版权声明:本文为Daisy74RJ原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Daisy74RJ/article/details/103484458

智能推荐

matplotlib之条状图显示中文标签

1、导入包 2、导入数据 3、统计消费性别倾向4、条形图上显示每个类别的占比 效果图,如下 5、遗留问题 统计结果中存在汉字,label显示不完全,还在查找解决办法,有知道的朋友可以留言相告,感激不尽...

python ubuntu matplotlib 无法显示中文

版权声明:本文为CSDN博主「Lucky-ing」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/lucky__ing/article/details/78699198 python ubuntu matplotlib 无法显示中文 博主最近很郁闷,因为在做NLP分析词向量的时候,一直想看看词向量训练的效...

windowns下python的matplotlib显示中文

1.永久解决 1.在python程序中写以下两行代码 输出字体文件的位置 2.根据输出的位置找到此文件打开 将文件中的 #font.family: sans-serif 去掉注释#号,修改为 font.family: Microsoft YaHei 3.运行程序即可,已成功...

(Python 3)关于matplotlib显示中文

前言 遇到了一个挺头疼的问题,就是关于matplotlib绘制出来的图怎么显示中文。默认情况下,比如下面这句 显示出来的标题带有方框,识别不出中文(如图)。找了挺久,试了几种方法,现在终于可以了。 环境 ubuntu16.04 pycharm python3 matplotlib 过程 很多文章都说要加上下面这句,加了之后一般没效果。原因在于里面的字体库没有所提到的SimHei字体。 解决方法自然...

python ubuntu matplotlib 无法显示中文

python ubuntu matplotlib 无法显示中文 博主最近很郁闷,因为在做NLP分析词向量的时候,一直想看看词向量训练的效果,但是在ubuntu16.04上使用matplotlib展示的时候发现无法显示中文。就像下图一样: 后来博主在网上查了很久,各种方法都试了,但是仍然没有用。于是博主决定自己尝试着弄。终于在我苦心尝试下,找到了一个好办法。 下载字体msyh.ttf,网址:http...

猜你喜欢

解决python pyplot库 matplotlib 绘图里中文字符无法正常显示的问题

解决python pyplot库 matplotlib 绘图里中文字符无法正常显示的问题...

冒泡排序,及改进方式,性能优化400%>>>附图解加源码

首先源码附上,源码中带有注释,看不懂没关系,源码后面附带图解,最后附上代码效率提升图 源码如下: 方案一:其实实现很简单,两层循环,每次内层迭代出最大的一个值,将其放入数组最后一个位置,外层循环的末端便往前移一位。其原理如下图 方案一代码块: 方案二:优化改进 仔细观察上面的图,我们不难发现当迭代到图下这样的情况时,其实已经全排序好了,但是我们还是需要对它进行1,2,3,4,5,6的迭代,这些情况...

css3常用选择器

先介绍一下基本选择器,如下几种 *:通配符。选择页面的所有元素 E:元素选择器。对页面的一些元素进行选择,如p,div,li等 .class:类选择器 #id:id选择器。一个Id在一个页面中只能选择,这是和类选择器的区别 E F:后代选择器。如ul li。选中ul下的li E>F:子元素选择器。如下,可以用 h1 > strong {color:red;}使h1的子元素strong变...

python is not set from command line or npm configuration

问题 猜测原因  python版本冲突 解决方案  去官网找到最新版本python 点击下载,注意记住你下载的目录,下载好以后,打开这个目录下的文件夹,Python310, 整个文件夹复制一下 在项目里运行npm config list --json 找到python的路径   我的是 C:\\Python27\\python.exe 说明项目里用的还是py...

Java8 Stream流操作

前言 我们常常需要将一个容器转化成另一个容器,或是对这个容器中的数据进行批量处理,这时使用Stream流可以大大减少我们的工作量。 1 Stream概述 Java 8 是一个非常成功的版本,这个版本新增的Stream,配合同版本出现的 Lambda ,给我们操作集合(Collection)提供了极大的便利。 那么什么是Stream? Stream将要处理的元素集合看作一种流,在流的过程中,借助St...