一行代码让matplotlib图表变高大上
1 简介
matplotlib作为Python生态中最流行的数据可视化框架,虽然功能非常强大,但默认样式比较简陋,想要制作具有简洁商务风格的图表往往需要编写众多的代码来调整各种参数。
而今天要为大家介绍的dufte,就是用来通过简短的代码,对默认的matplotlib图表样式进行自动改造的Python库:
2 利用dufte自动改造matplotlib图表
通过pip install dufte安装完成后,我们就可以将dufte的几个关键API穿插在常规matplotlib图表的绘制过程中,目前主要有以下几种功能:
2.1 主题设置
dufte最重要的功能是其自带的主题风格,而在matplotlib中有两种设置主题的方式,一种是利用plt.style.use(主题)来全局设置,一般不建议这种方式。
另一种方式则是以下列方式来在with的作用范围内局部使用主题:
# 局部主题设置
with plt.style.context(主题):
# 绘图代码
...
我们今天就都使用第二种方式,首先导入演示所需的依赖库,并从本地注册思源宋体:
import dufte
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import font_manager
# 注册本地思源宋体
fontproperties = font_manager.FontProperties(fname='NotoSerifSC-Regular.otf')
接下来我们以折线图和柱状图为例:
- 折线图
# 折线图示例
with plt.style.context(dufte.style):
x = range(100)
y = np.random.standard_normal(100).cumsum()
fig, ax = plt.subplots(figsize=(10, 5), facecolor='white', edgecolor='white')
ax.plot(x, y, linestyle='-.', color='#607d8b')
ax.set_xlabel('x轴示例', fontproperties=fontproperties, fontsize=16)
ax.set_ylabel('y轴示例', fontproperties=fontproperties, fontsize=16)
ax.set_title('折线图示例', fontproperties=fontproperties, fontsize=20)
fig.savefig('图2.png', dpi=300, bbox_inches='tight')

- 柱状图
# 柱状图示例
with plt.style.context(dufte.style):
x = range(25)
y = np.random.standard_normal(25)
fig, ax = plt.subplots(figsize=(10, 5), facecolor='white', edgecolor='white')
ax.bar(x, y)
ax.set_xlabel('x轴示例', fontproperties=fontproperties, fontsize=16)
ax.set_ylabel('y轴示例', fontproperties=fontproperties, fontsize=16)
ax.set_title('柱状图示例', fontproperties=fontproperties, fontsize=20)
fig.savefig('图3.png', dpi=300, bbox_inches='tight')

可以看到,dufte自带了一套简洁的绘图风格,主张去除多余的轴线,只保留必要的参考线,适用于我们日常工作中的通用出图需求。
2.2 自动图例美化
除了前面介绍的整体主题风格之外,dufte还自带了一套图例风格化策略,只需要在绘图过程中利用dufte.legend()来代替matplotlib原有的legend()即可,以下面的折线图为例:
# 折线图示例
with plt.style.context(dufte.style):
x = range(100)
y1 = np.random.randint(-5, 6, 100).cumsum()
y2 = np.random.randint(-5, 10, 100).cumsum()
y3 = np.random.randint(-5, 6, 100).cumsum()
fig, ax = plt.subplots(figsize=(10, 5), facecolor='white', edgecolor='white')
ax.plot(x, y1, linestyle='dotted', label='Series 1')
ax.plot(x, y2, linestyle='dashed', label='Series 2')
ax.plot(x, y3, linestyle='dashdot', label='Series 3')
ax.set_xlabel('x轴示例', fontproperties=fontproperties, fontsize=16)
ax.set_ylabel('y轴示例', fontproperties=fontproperties, fontsize=16)
dufte.legend()
ax.set_title('dufte.legend()示例', fontproperties=fontproperties, fontsize=20)
fig.savefig('图4.png', dpi=300, bbox_inches='tight')
可以看到,对于多系列图表,只需要一行dufte.legend()就可以自动添加出下列别致的图例说明:

2.3 柱状图自动标注
很多时候我们在绘制柱状图时,希望把每个柱体对应的y值标注在柱体上,而通过dufte.show_bar_values(),只要其之前的绘图流程中设置了xticks,它就会帮我们自动往柱体上标注信息:
# 柱状图示例
with plt.style.context(dufte.style):
x = range(15)
y = np.random.randint(5, 15, 15)
fig, ax = plt.subplots(figsize=(10, 5), facecolor='white', edgecolor='white')
ax.bar(x, y)
ax.set_xticks(x)
ax.set_xticklabels([f'项目{i}' for i in x], fontproperties=fontproperties, fontsize=10)
dufte.show_bar_values()
ax.set_xlabel('x轴示例', fontproperties=fontproperties, fontsize=16)
ax.set_ylabel('y轴示例', fontproperties=fontproperties, fontsize=16)
ax.set_title('柱状图示例', fontproperties=fontproperties, fontsize=20)
fig.savefig('图5.png', dpi=300, bbox_inches='tight')

作为一个处于开发初期的库,dufte未来势必会加入更多的实用功能,感兴趣的朋友可以对其持续关注。
以上就是本文的全部内容,欢迎在评论区分享你的观点与建议。
一行代码让matplotlib图表变高大上的更多相关文章
- 【原】iOS动态性(四):一行代码实现iOS序列化与反序列化(runtime)
为取得更好的排版效果,本文同样发布在简书上,强烈建议跳转到[1]http://www.jianshu.com/p/fed1dcb1ac9f 一.变量声明 为便于下文讨论,提前创建父类Biology以及 ...
- iOS 3DES加密解密(一行代码搞定)
3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称.它相当于是对每个数据块应用三次DES加密算法.由于计 ...
- 一行代码设置TForm颜色的前世今生(属性赋值引起函数调用,然后发消息实现改变显示效果),TForm的初始颜色在dfm中设置了clBtnFace色
来自万一的帖子:http://www.cnblogs.com/del/archive/2008/04/27/1173658.html的确做到了一行代码设置TForm控件的颜色(一点感想:Delphi程 ...
- Sagit.Framework For IOS 开发框架入门开发教程2:一行代码实现引导页
前言: 开篇比较简单:Sagit.Framework For IOS 开发框架入门开发教程1:框架下载与环境配置 第二篇教程之前写了一半,感觉不太好写,而且内容单纯介绍API,要说的很多,又枯燥乏味. ...
- CSDN日报20170310——《假如我是一行代码》
[程序人生]假如我是一行代码 作者:henry-hacker 我们不止一次在生活中听到"假如我如何如何,我会如何如何"的句式.而这种句式说出来的一般意义无非就是让我们站在还有一个角 ...
- python基础知识-8-三元和一行代码(推导式)
python其他知识目录 1.三元运算(三目运算) 三元运算符就是在赋值变量的时候,可以直接加判断,然后赋值格式:[on_true] if [expression] else [on_false]re ...
- Java进阶知识点2:看不懂的代码 - 协变与逆变
一.背景 要搞懂Java中的协办与逆变,不得不从继承说起,如果没有继承,协变与逆变也天然不存在了. 我们知道,在Java的世界中,存在继承机制.比如MochaCoffee类是Coffee类的派生类,那 ...
- 翻遍互联网都找不到的解决方案,一行代码轻松实现 Gitbook 默认折叠左侧菜单效果
Gitbook 是一款产品文档构建工具,也可以用于构建个人博客,默认情况下电脑端访问时左侧菜单是展开状态,可偏偏有人想要实现默认折叠效果,于是诞生了这篇文章! 善良的我选择帮助别人 可能是网上关于 G ...
- 【原创】够强!一行代码就修复了我提的Dubbo的Bug。
这是 why 技术的第 28 篇原创文章 之前在<Dubbo 一致性哈希负载均衡的源码和 Bug,了解一下?>中写到了我发现了一个 Dubbo 一致性哈希负载均衡算法的 Bug. 对于解决 ...
随机推荐
- 3D点云重建原理及Pytorch实现
3D点云重建原理及Pytorch实现 Pytorch: Learning Efficient Point Cloud Generation for Dense 3D Object Reconstruc ...
- flume采集MongoDB数据到Kafka中
环境说明 centos7(运行于vbox虚拟机) flume1.9.0(自定义了flume连接mongodb的source插件) jdk1.8 kafka(2.11) zookeeper(3.57) ...
- thymeleaf模板引擎基础知识
一.表达式 分为四类: 1.变量表达式 ${} :获取容器上下文变量的值. 举例: 获取application域中的username: ${application.username} 获取sessio ...
- 痞子衡嵌入式:嵌入式里串口(UART)自动波特率识别程序设计与实现
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是嵌入式里串口(UART)自动波特率识别程序设计与实现. 串口(UART)是嵌入式里最基础最常用也最简单的一种通讯(数据传输)方式,可以说 ...
- 6.7考试总结(NOIP模拟5)
前言 昨天说好不考试来着,昨晚就晚睡颓了一会,今天遭报应了,也没好好考,考得挺烂的就不多说了. T1 string 解题思路 比赛上第一想法就是打一发sort,直接暴力,然后完美TLE40pts,这一 ...
- 「模拟8.13」任(liu_runda的神题,性质分析)
考场时没有发现性质,用了个前缀和优化暴力,结果写WA了 我们发现其实联通块的个数就是点的个数-边的个数 然后我们需要维护横向上和纵向上的边的前缀和 前缀和的查询形式稍改一下 暴力 1 #include ...
- 重新整理 .net core 实践篇—————Mediator实践[二十八]
前言 简单整理一下Mediator. 正文 Mediator 名字是中介者的意思. 那么它和中介者模式有什么关系呢?前面整理设计模式的时候,并没有去介绍具体的中介者模式的代码实现. 如下: https ...
- Netty 框架学习 —— 基于 Netty 的 HTTP/HTTPS 应用程序
通过 SSL/TLS 保护应用程序 SSL 和 TLS 安全协议层叠在其他协议之上,用以实现数据安全.为了支持 SSL/TLS,Java 提供了 javax.net.ssl 包,它的 SSLConte ...
- Redis之内存优化
Redis所有的数据都存在内存中,当前内存虽然越来越便宜,但跟廉价的硬盘相比成本还是比较昂贵,因此如何高效利用Redis内存变得非常重要.高效利用Redis内存首先需要理解Redis内存消耗在哪里,如 ...
- CentOS中按tab键不能自动补全问题解决办法
CentOS中按tab键不能自动补全问题解决办法 一:检查一下系统有没有安装bash-completion包. 二:yum查找一下 三:yum安装bash-completion包 前言 在CentOS ...