Pandas matplotlib 无法显示中文
Pandas 无法显示中文问题 解决方案
Pandas在绘图时,会显示中文为方块,主要原因有二: matplotlib 字体问题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
Pandas matplotlib 无法显示中文的更多相关文章
- matplotlib无法显示中文
import matplotlib as mpl mpl.rcParams['font.sans-serif'] = ['KaiTi']mpl.rcParams['font.serif'] = ['K ...
- python pandas 画图、显示中文、股票K线图
目录: 1.pandas官方画图链接 2.标记图中数据点 3.画图显示中文 4.画股票K线图 5.matplotlib基本用法 6.format输出 6.format输出例子 eps_range=[0 ...
- Mac下使用Matplotlib无法显示中文的解决办法
参考:matplotlib图例中文乱码? - 知乎用户的回答 - 知乎 https://www.zhihu.com/question/25404709/answer/309784195 1.下载字体安 ...
- matplotlib 图标显示中文
matplotlib 显示中文 Method_1: # 添上: plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签 plt.rcPara ...
- matplotlib如何显示中文
问题:matplotlib不能渲染中文 想设定为中文字体,网上搜索的方法几乎都是下面这样,已经把字体拷贝到了程序目录下了,然而并没有生效 plt.rcParams [ font.sans-serif' ...
- Matplotlib 如何显示中文
Python 3.x 主要是如下代码 import os font = FontProperties(fname=os.path.expandvars(r"%windir%\fonts\si ...
- matplotlib 显示中文 与 latex冲突
如果在使用中文之前包含了使用latex的语法: mpl.rcParams['text.usetex'] = True 将不能正确显示含有中文的图片. 附 显示中文的方法: from matplotli ...
- ubuntu下使用matplotlib绘图无法显示中文label
原因是字体导致的.大家的做法基本都是搞一个windows上的字体文件(simhei.ttf, 点我fq下载)然后刷新一下缓存文件. 只不过百度搜到第一篇CSDN的博客,写的很不靠谱(不是所有的CSDN ...
- 设置matplotlib画图支持中文显示
1.安装中文字体 git clone https://github.com/tracyone/program_font && cd program_font && ./ ...
随机推荐
- EF添加关联的提示问题:映射从第 260 行开始的片段时有问题:
一,EF添加关联的提示问题 严重性 代码 说明 项目 文件 行 禁止显示状态错误 错误 3004: 映射从第 260 行开始的片段时有问题:没有为 设置 T_xx_xxRelation 中的属性 T_ ...
- id 和 name 区别
在html中:name指的是用户名称,ID指的是用户注册是系统自动分配给用户的一个序列号. name是用来提交数据的,提供给表单用,可以重复: id则针对文档操作时候用,不能重复.如:document ...
- 异常处理 VEH
不算新的东西,也都不小了, VEH的结构处理,平行于SEH,但是略有区别, 相关函数有四个 PVOID WINAPI AddVectoredExceptionHandler( _In_ ULONG F ...
- Angular.js 使用获取验证码按钮实现-倒计时
获取验证码界面效果如图: 需要实现以下逻辑 按钮不可选 --输入电话号码,按钮可选 --点击获取,进入倒计时,按钮不可选 --倒计时结束,回到初识状态 核心代码: var cd = 60; var t ...
- 记录面试一位三年经验Web前端开发者的过程
今天是2019年6月5日,后天就是端午节了,提前祝端午节快乐! 好了,开始这次面试过程的正题部分. 当我从人事手中接下这份三年哥(暂拟名称)的简历的时候,看到三年工作经验,心想 这应该是个大佬了 挺厉 ...
- Nginx针对前端静态资源的缓存处理
当用户上报一个线上的bug后,开发者修改前端代码的bug上新后,用户反映问题依旧存在的问题...这种情况是不是曾经遇到过,这个问题跟浏览器的缓存机制有很大关系(强制缓存和协商缓存,这里我就不介绍具体的 ...
- windows 2012 R2 及 centos 7.X 禁用不必要服务
8.windows 2012 R2 及 centos 7.X 禁用不必要服务 React VR 技术开发群 579149907 1.windows2012 R2 可以禁用以下不必要的服务,以下禁用的服 ...
- 2018-2-13-win10-uwp-参考
title author date CreateTime categories win10 uwp 参考 lindexi 2018-2-13 17:23:3 +0800 2018-2-13 17:23 ...
- VS 2019编辑含有资源文件.resx的项目时提示MSB3086 任务未能使用 SdkToolsPath 或注册表项找到“al.exe”
环境: Win10 X64, VS2019 错误提示: 错误 MSB3086 任务未能使用 SdkToolsPath“”或注册表项“HKEY_LOCAL_MACHINE\SOFTWARE\Micros ...
- VS TODO注释快捷键
快速按出任务列表 todo 注释 Ctrl 键+ \| 键+ T键