【matplotlib基础】--手绘风格
Matplotlib 中有一个很有趣的手绘风格。
如果不是特别严肃的分析报告,使用这个风格能给枯燥的数据分析图表带来一些活泼的感觉。
使用手绘风格非常简单,本篇主要手绘风格的效果以及如何配置中文的支持。
1. 中文支持
Matplotlib 的手绘风格默认是不支持中文的,中文在图形中会显示成方格子。
如果本机已经安装了中文字体,直接选择相应的字体即可,否则,需要下载安装。
1.1. 字体下载
如果没有合适的中文字体,可从下面地址下载:
https://url11.ctfile.com/f/45455611-872362386-3dafb6?p=6872 (访问密码: 6872)
这个zip包中有两个字体:
- 微软雅黑字体:中规中矩的中文字体
- 方正卡通字体:这个字体比较适合手绘风格,本篇的示例使用的就是这个字体。
1.2. 字体安装
如果是windows系统的话,字体下载后,直接双击,然后选择安装即可。linux系统的话,一般是把字体文件复制到 /usr/share/fonts 目录下。
字体安装后,可能在 Matplotlib 中不会生效,这是因为Matplotlib 对字体有缓存。
在windows中,删除缓存的字体文件(C:\Users\{登录系统的用户}\.matplotlib\fontlist-v330.json),重新运行程序,会再次生成字体缓存。
linux中,可以通过运行 fc-cache,重新生成字体缓存。
1.3. 显示效果
安装字体之后,改成手绘风格只需要添加一行代码:with plt.xkcd():
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
#绘图示例图形的函数
def draw(title="中文标题"):
#这里使用的是方正卡通字体
plt.rcParams.update({
"font.family": "FZKaTong-M19S",
"font.size": 11
})
x = np.array(range(10))
y = np.random.randint(10, 100, 10)
fig = plt.figure(figsize=[8, 6])
fig.subplots_adjust(hspace=0.5)
fig.add_subplot(211)
plt.plot(x, y, label="曲线1")
y1 = np.random.randint(10, 100, 10)
plt.plot(x, y1, label="曲线2")
plt.legend()
plt.title(title)
fig.add_subplot(212)
plt.bar(["苹果", "橘子", "香蕉", "西瓜", "桃子"],
height=y[:5],
color=["b", "c", "g", "m"])
#将绘制图形的函数放在 plt.xkcd上下文中即可
with plt.xkcd():
draw()

中文用的是方正卡通字体,和手绘风格搭配较好。
2. 手绘风格参数
手绘风格函数 plt.xkcd() 有3个主要参数,调整这3个参数,可以修正手绘的效果。
3个参数分别是:
- scale:手绘的各种线条的弯曲程度
- length:每个弯曲处的长度
- randomness:产生弯曲的随机性
2.1. scale 参数
scale 越小,弯曲程度越低。
for scale in [0.5, 2, 10]:
with plt.xkcd(scale=scale):
draw()



2.2. length 参数
length 参数控制每个弯曲的长度,也就是 length越大,弯曲的越平滑。
for length in [1, 10, 100]:
with plt.xkcd(length=length):
draw(f"length 参数 = {length}")



2.3. randomness 参数
randomness 参数控制产生弯曲的随机性,randomness越大,产生的弯曲处越多。
for randomness in [1, 10, 100]:
with plt.xkcd(randomness=randomness):
draw(f"randomness 参数 = {randomness}")



【matplotlib基础】--手绘风格的更多相关文章
- 手绘风格的 JS 图表库:Chart.xkcd
本文作者:HelloGitHub-kalifun 图表库千万个今天 HelloGitHub 给大家推荐个很有"特色"的图表库:一个手绘风格的 JS 图表库 -- Chart.xkc ...
- JavaScript手绘风格的图形库RoughJS使用指南
RoughJS是一个轻量级的JavaScript图形库(压缩后约9KB),可以让你在网页上绘制素描风格.手绘样式般的图形.RoughJS定义了绘制直线,曲线,圆弧,多边形,圆和椭圆的图元,同时它还支持 ...
- 免费下载:320+ 手绘风格 Apple iOS7 图标
Themify 图标是一套用在网页设计和应用程序的图标,包括 320+ 手工制作的像素完美的苹果 iOS7 图标中汲取灵感.这些图标完全免费,您可以用于任何目的,无论是个人或商业. 您可能感兴趣的相 ...
- Python中使用cutecharts实现简单的手绘风格的图表
场景 效果 cutecharts的Github: https://github.com/chenjiandongx/cutecharts 注: 博客: https://blog.csdn.net/ba ...
- Python绘图还在用Matplotlib?out了 !发现一款手绘可视化神器!
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. GitHub 地址:https://github.com/chenjian ...
- 发现一款手绘可视化神器!Python绘图还在用Matplotlib?out了 !
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取htt ...
- [置顶] 内存管理一点也不神秘————手绘iOS内存管理细节
今天给大家带来的一篇手绘风格博文<内存管理一点也不神秘> 每当我们程序执行alloc/new/copy/mutableCopy的时候,当我们执行release的时候,当我们执行retain ...
- 你也可以手绘二维码(二)纠错码字算法:数论基础及伽罗瓦域GF(2^8)
摘要:本文讲解二维码纠错码字生成使用到的数学数论基础知识,伽罗瓦域(Galois Field)GF(2^8),这是手绘二维码填格子理论基础,不想深究可以直接跳过.同时数论基础也是 Hash 算法,RS ...
- UWP 手绘视频创作工具技术分享系列 - 有 AI 的手绘视频
AI(Artificial Intelligence)正在不断的改变着各个行业的形态和人们的生活方式,图像识别.语音识别.自然语言理解等 AI 技术正在自动驾驶.智能机器人.人脸识别.智能助理等领域中 ...
- UWP 手绘视频创作工具技术分享系列 - 全新的 UWP 来画视频
从2017年11月开始,我们开始规划和开发全新的来画Pro,在12月23日的短视频峰会上推出了预览版供参会者体验,得到了很高的评价和关注度.吸取反馈建议后,终于在2018年1月11日正式推出了全新版本 ...
随机推荐
- 野火指南者(STM32F103VET6)应用:实现USB虚拟串口(CDC_VPC)
MCU:STM32F103VET6 开发环境:STM32CubeMX+MDK5 实现USB的虚拟串口不需要去理解USB的底层驱动,只需要STM32CubeMX去配置生成工程即可.在野火的指南者中,是没 ...
- Qt+QtWebApp开发笔记(五):http服务器html中使用json触发ajax与后台交互实现数据更新传递
前言 前面完成了页面的跳转.登录,很多时候不刷新页面就想刷新局部数据,此时ajax就是此种技术,且是异步的. 本篇实现网页内部使用js调用ajax实现异步交互数据. 在js中使用 ajax是通 ...
- Rust 通用编程概念
通用编程概念 变量.基本类型.函数.控制流 变量与可变性 rust中的变量默认是不可变的,这样是为了能够让你安全并且方便地写出复杂.甚至并行的代码. 当一个变量是不可变时,一旦它绑定到了某个值上面,这 ...
- C++面试八股文:什么是左值,什么是右值?
某日二师兄参加XXX科技公司的C++工程师开发岗位第16面: 面试官:什么是左值,什么是右值? 二师兄:简单来说,左值就是可以使用&符号取地址的值,而右值一般不可以使用&符号取地址. ...
- 关于linq Where中的”或者“运算只查询出来满足一种条件的数据的问题,本质是IEnumerable和IQuerable之间的区别
如下代码所示,其中的"query"返回值类型为IQuerable var query = _deviceRepository.GetAll().AsNoTracking() .Wh ...
- 2023-06-22:一所学校里有一些班级,每个班级里有一些学生,现在每个班都会进行一场期末考试 给你一个二维数组 classes ,其中 classes[i] = [passi, totali] 表
2023-06-22:一所学校里有一些班级,每个班级里有一些学生,现在每个班都会进行一场期末考试 给你一个二维数组 classes ,其中 classes[i] = [passi, totali] 表 ...
- Subset Sum 问题单个物品重量限制前提下的更优算法
前言 看了 ShanLunjiaJian 关于这个问题的文章,是完全没看懂,沙东队爷的中枢神经内核配置把我偏序了.叉姐在下面提了个论文,论文找不到资源,谁搞到了可以 Q 我一份之类的拜谢了.然后找到了 ...
- 利用身份验证和授权机制,例如OAuth、JWT 和 API 密钥,APIaaS 如何帮助解决安全挑战?
什么是 APIaaS? APIaaS,即 API 即服务(API as a Service)是一种创新的基于云的方法,提供 API(应用程序编程接口),使第三方服务提供商能够访问特定服务.数据或资源. ...
- 【环境搭建】vscode调试php
待解决问题 使用vscode和phpstudy实现PHP的本地调试 解决办法 1.打开xdebug 找到网站使用的PHP版本,在设置中将Xdebug调试组件打开,并确认端口是9000 找到php扩展目 ...
- 正确处理 CSV 文件的引号和逗号
CSV(Comma-Separated Values,逗号分割值),就是用纯文本的形式存储表格数据,最大的特点就是方便. 作为开发,我们经常面临导数据的问题,特别是后台系统,产品或者运营的同事常常会提 ...