本文示例文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes

1 简介

  matplotlib作为数据可视化的利器,被广泛用于数据分析之中,但不太友好的是matplotlib中书写非英文文字内容时,如果不事先对字体进行相关设置,会发现绘制出的诸如中文等均显示为方块乱码,而今天的内容,我们就来小小总结一下matplotlib中字体设置的常用技巧。

图1

2 在matplotlib中设置字体的常用方法

  在matplotlib中设置字体的方法按作用范围可分为全局设置与临时设置:

2.1 在matplotlib中设置全局字体

  我们在默认状态下使用matplotlib书写中文内容时之所以显示出乱码,是因为matplotlib默认的字体为英文字体,导致许多unicode编码的语言文字都无法书写。

  而全局设置字体的方式,指的是我们可以通过修改本地配置文件或在程序开头设置字体相关参数,从而人为地为当前kernel下的matplotlib规定使用指定的字体,主要有以下几种情况:

  • 使用系统自带字体

  所谓系统自带字体,譬如对于windows,其系统盘Windows/Fonts下的诸多已安装到系统中的字体:

图2

  当然,matplotlib可以检测到的字体不止上述的这些,我们可以通过下列方式查看matplotlib中默认已经识别到的所有可用字体:

import matplotlib.pyplot as plt
from matplotlib import font_manager for font in font_manager.fontManager.ttflist:
# 查看字体名以及对应的字体文件名
print(font.name, '-', font.fname)

图3

  其中在font_manager.fontManager.ttflist中迭代到的每个对象,其name属性即为我们下面设置字体要使用到的名称,以华文琥珀为例,我们先查看到其对应的字体文件名称:

图4

  接着我们写两行程序来找到其对应的名称:

图5

  接着按照plt.rcParams['font.sans-serif'] = 字体名称的格式设置即可:

图6

  可以看到这时我们全局所有文字都变成华文琥珀

  • 使用任意的字体

  如果你想要的字体不在系统默认字体中,且你只想临时使用不想安装到系统字体中,则可以利用font_manager.fontManager.addfont()来传入字体文件路径临时注册一个字体,以我下载的三方字体文件MaShanZheng-Regular.ttf为例:

图7
图8

2.2 在matplotlib中设置局部字体

  而如果你只是想要在数据可视化作品中的部分元素譬如文字标注中临时使用一下字体,则可以利用font_manager.FontProperties()将字体路径作为fname参数传入,并传入到对应matplotlib绘图API相应参数中,以text()为例:

图9

  而刻度标签则可以参考下面的方式:

图10


  以上就是本文的全部内容,欢迎在评论区与我进行讨论~

(数据科学学习手札100)搞定matplotlib中的字体设置的更多相关文章

  1. (数据科学学习手札128)在matplotlib中添加富文本的最佳方式

    本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 长久以来,在使用matplotlib进行绘 ...

  2. (数据科学学习手札44)在Keras中训练多层感知机

    一.简介 Keras是有着自主的一套前端控制语法,后端基于tensorflow和theano的深度学习框架,因为其搭建神经网络简单快捷明了的语法风格,可以帮助使用者更快捷的搭建自己的神经网络,堪称深度 ...

  3. (数据科学学习手札71)在Python中制作个性化词云图

    本文对应脚本及数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 一.简介 词云图是文本挖掘中用来表征词频的数据可视化 ...

  4. (数据科学学习手札58)在R中处理有缺失值数据的高级方法

    一.简介 在实际工作中,遇到数据中带有缺失值是非常常见的现象,简单粗暴的做法如直接删除包含缺失值的记录.删除缺失值比例过大的变量.用0填充缺失值等,但这些做法会很大程度上影响原始数据的分布或者浪费来之 ...

  5. (数据科学学习手札125)在Python中操纵json数据的最佳方式

    本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 在日常使用Python的过程中,我们经常会 ...

  6. (数据科学学习手札127)在Python中使用icecream实现高效debug

    本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 尽管有那么多花里胡哨的debug工具和方式 ...

  7. (数据科学学习手札96)在geopandas中叠加在线地图

    本文示例文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 国庆期间,抽空给大家分享在geopandas中叠 ...

  8. (数据科学学习手札97)掌握pandas中的transform

    本文示例文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 开门见山,在pandas中,transform是 ...

  9. (数据科学学习手札99)掌握pandas中的时序数据分组运算

    本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 我们在使用pandas分析处理时间序列数据 ...

随机推荐

  1. [原题复现+审计][0CTF 2016] WEB piapiapia(反序列化、数组绕过)[改变序列化长度,导致反序列化漏洞]

    简介  原题复现:  考察知识点:反序列化.数组绕过  线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题 漏洞学习 数组 ...

  2. jsonp和普通的ajax区别

    1.请求类型.返回类型不一样 2.返回数据类型

  3. 工作一年半被裁掉,机缘巧合拿到阿里P7offer,得亏我看过这份“突击”面试宝典

    前言 不论是校招还是社招都避免不了各种⾯试.笔试,如何去准备这些东⻄就显得格外重要.不论是笔试还是⾯试都是有章可循的,我这个"有章可循"说的意思只是说应对技术⾯试是可以提前准备,所 ...

  4. 新鲜出炉!2020年最新java面试题大全,面试突击必备!

    前言 发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了一套Java面试题,希望对大家有帮助哈~ 打算这几天每天更新15~20题.(这样有助于你们阅读和理解!)我们先从简单的开始 1 ...

  5. PowerPoint无法正常加载MathType的解决方法

    MathType是一款十分便捷的数学公式编辑器,可以和很多办公软件和网站兼容使用,我们日常用的比较多的也就是Office和WPS,更具体的说是Word\Excel\PPT等等一系列办公常用软件. 不过 ...

  6. Jmeter(二十八) - 从入门到精通 - Jmeter Http协议录制脚本工具-Badboy1(详解教程)

    1.简介 在使用jmeter自动录制脚本时会产生很多无用的请求,所以推荐使用badboy录制脚本之后保存为jmx文件,在jmeter中打开使用.因此宏哥在这里介绍一下Badboy这款工具,本来打算不做 ...

  7. GitHub 上 1.3k Star 的 strman-java 项目有值得学习的地方吗?源码视角

    大家好,我是沉默王二. 很多初学编程的同学,经常给我吐槽,说:"二哥,你在敲代码的时候会不会有这样一种感觉,写着写着看不下去了,觉得自己写出来的代码就好像屎一样?" 这里我必须得说 ...

  8. Goland 2020.2.x 激活码永久破解教程 (最新Goland激活码!2020.11.26亲测可用!)

    在2020.11.26 Goland的用户们又迎来了一次更新,这就导致很多软件打开时候就提示Goland激活码已经失效,码小辫第一时间给各位分享了关于最新Goland激活破解教程! goland已经更 ...

  9. C++基础入门知识:C++命名空间(名字空间)详解

    一个中大型软件往往由多名程序员共同开发,会使用大量的变量和函数,不可避免地会出现变量或函数的命名冲突.当所有人的代码都测试通过,没有问题时,将它们结合到一起就有可能会出现命名冲突. 例如小李和小韩都参 ...

  10. 使用@RequestBody注解获取Ajax提交的json数据

    最近在学习有关springMVC的知识,今天学习如何使用@RequestBody注解来获取Ajax提交的json数据内容. Ajax部分代码如下: 1 $(function(){ 2 $(" ...