Matplotlib 饼状图中的文字中文乱码问题

Stella981
• 阅读 915

今天用matplotlib画饼状图时候遇到中文乱码,一般遇到中文乱码有两种通用的解决方法,一种是修改matplotlibrc,通过修改matplotlibrc中的font.sans-serif添加中文,一种是直接在代码中通过rcParams修改字体,既然遇到乱码当然先用传统方法试试,代码如下:

Matplotlib 饼状图中的文字中文乱码问题

可以看到虽然title的中文问题解决了,但是饼状图的中文依然显示乱码,下面试试修改matplotlibrc文件

遇到中文可以看出乱码问题,然后尝试了修改matplotlibrc文件,但是问题却依然没得到解决:

Matplotlib 饼状图中的文字中文乱码问题

Lib\site-packages\matplotlib\mpl-data目录,打开matplotlibrc文件,删除font.familyfont.sans-serif两行前的#,并在font.sans-serif后添加微软雅黑字体(Microsoft YaHei),但是发现原来还是不行,究竟是什么问题呢?

______________________________________________________

后来发现ax.pie()函数返回值里面有text实例如下图:

ax.pie(np.array(game_app["download_times"])[:5],labels=game_app["name"][:5],autopct='%1.1f%%')
×
Out[73]:
([<matplotlib.patches.Wedge at 0xd1b7450>,
  <matplotlib.patches.Wedge at 0xd4686f0>,
  <matplotlib.patches.Wedge at 0xd5757b0>,
  <matplotlib.patches.Wedge at 0xd58b4f0>,
  <matplotlib.patches.Wedge at 0xd58b950>],
 [<matplotlib.text.Text at 0xd531710>,
  <matplotlib.text.Text at 0xd575250>,
  <matplotlib.text.Text at 0xd575b90>,
  <matplotlib.text.Text at 0xd58b3d0>,
  <matplotlib.text.Text at 0xd58bd30>],
 [<matplotlib.text.Text at 0xd4689d0>,
  <matplotlib.text.Text at 0xd575450>,
  <matplotlib.text.Text at 0xd575f70>,
  <matplotlib.text.Text at 0xd58b690>,
  <matplotlib.text.Text at 0xd58bfb0>])

查看了一下text实例的fontname名称,竟然不是Microsoft YaHei还是Bitstream Vera Sans,原来问题在这,图形中的text实例并没有受到影响:

a = ax.pie(np.array(game_app["download_times"])[:5],labels=game_app["name"][:5],autopct='%1.1f%%')
a[1][1].get_fontname()
Out[46]:
'Bitstream Vera Sans'

那么只能直接改text实例了,

pie = ax.pie(np.array(game_app["download_times"])[:5],labels=game_app["name"][:5],autopct='%1.1f%%')
#图形中的文字无法通过rcParams设置
for font in pie[1]:
    font.set_fontproperties(mpl.font_manager.FontProperties(
            fname='L:/Python27/Lib/site-packages/matplotlib/mpl-data/fonts/ttf/simfang.ttf'))

修改后饼状图图形中的中文乱码可以解决了:

Matplotlib 饼状图中的文字中文乱码问题

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Stella981 Stella981
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Easter79 Easter79
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Stella981 Stella981
3年前
Netbeans中文乱码问题汇总
Netbeans中文乱码问题汇总(转)2009071110:37最近刚刚开始用Netbeans,就遇到了最容易遇到的中文乱码问题。(好像从Eclipse,到JBuilder再到Netbeans,都需要解决这类问题)于是在网上查找了一下,这里给出一个常见的中文乱码问题汇总。呵呵。   最常见的,源程序导入Netbeans中以后,其中的注释或
Stella981 Stella981
3年前
JOptionPane修改图标
1.在Linux平台下.JOptionPane会显示Java默认的图标,在window平台不显示图标,如何替换这个图标了?2JOptionPane.setIcon(Icon)修改的是内容区域的icon,而不是左上角的Icon.所以需要通过修改Jdialog/Frame的图标来达到修改默认图标的问题.3.代码:if(JOptio
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这