Matplotlib 中有一个很有趣的手绘风格。
如果不是特别严肃的分析报告,使用这个风格能给枯燥的数据分析图表带来一些活泼的感觉。

使用手绘风格非常简单,本篇主要手绘风格的效果以及如何配置中文的支持。

1. 中文支持

Matplotlib 的手绘风格默认是不支持中文的,中文在图形中会显示成方格子。
如果本机已经安装了中文字体,直接选择相应的字体即可,否则,需要下载安装。

1.1. 字体下载

如果没有合适的中文字体,可从下面地址下载:
https://url11.ctfile.com/f/45455611-872362386-3dafb6?p=6872 (访问密码: 6872)

这个zip包中有两个字体:

  1. 微软雅黑字体:中规中矩的中文字体
  2. 方正卡通字体:这个字体比较适合手绘风格,本篇的示例使用的就是这个字体。

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个参数分别是:

  1. scale:手绘的各种线条的弯曲程度
  2. length:每个弯曲处的长度
  3. 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基础】--手绘风格的更多相关文章

  1. 手绘风格的 JS 图表库:Chart.xkcd

    本文作者:HelloGitHub-kalifun 图表库千万个今天 HelloGitHub 给大家推荐个很有"特色"的图表库:一个手绘风格的 JS 图表库 -- Chart.xkc ...

  2. JavaScript手绘风格的图形库RoughJS使用指南

    RoughJS是一个轻量级的JavaScript图形库(压缩后约9KB),可以让你在网页上绘制素描风格.手绘样式般的图形.RoughJS定义了绘制直线,曲线,圆弧,多边形,圆和椭圆的图元,同时它还支持 ...

  3. 免费下载:320+ 手绘风格 Apple iOS7 图标

    Themify 图标是一套用在网页设计和应用程序的图标,包括 320+ 手工制作的像素完美的苹果  iOS7 图标中汲取灵感.这些图标完全免费,您可以用于任何目的,无论是个人或商业. 您可能感兴趣的相 ...

  4. Python中使用cutecharts实现简单的手绘风格的图表

    场景 效果 cutecharts的Github: https://github.com/chenjiandongx/cutecharts 注: 博客: https://blog.csdn.net/ba ...

  5. Python绘图还在用Matplotlib?out了 !发现一款手绘可视化神器!

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. GitHub 地址:https://github.com/chenjian ...

  6. 发现一款手绘可视化神器!Python绘图还在用Matplotlib?out了 !

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取htt ...

  7. [置顶] 内存管理一点也不神秘————手绘iOS内存管理细节

    今天给大家带来的一篇手绘风格博文<内存管理一点也不神秘> 每当我们程序执行alloc/new/copy/mutableCopy的时候,当我们执行release的时候,当我们执行retain ...

  8. 你也可以手绘二维码(二)纠错码字算法:数论基础及伽罗瓦域GF(2^8)

    摘要:本文讲解二维码纠错码字生成使用到的数学数论基础知识,伽罗瓦域(Galois Field)GF(2^8),这是手绘二维码填格子理论基础,不想深究可以直接跳过.同时数论基础也是 Hash 算法,RS ...

  9. UWP 手绘视频创作工具技术分享系列 - 有 AI 的手绘视频

    AI(Artificial Intelligence)正在不断的改变着各个行业的形态和人们的生活方式,图像识别.语音识别.自然语言理解等 AI 技术正在自动驾驶.智能机器人.人脸识别.智能助理等领域中 ...

  10. UWP 手绘视频创作工具技术分享系列 - 全新的 UWP 来画视频

    从2017年11月开始,我们开始规划和开发全新的来画Pro,在12月23日的短视频峰会上推出了预览版供参会者体验,得到了很高的评价和关注度.吸取反馈建议后,终于在2018年1月11日正式推出了全新版本 ...

随机推荐

  1. OSI7层模型和TCP/IP模型

    前言 在计算机网络领域中,OSI7层模型和TCP/IP模型是两个重要的概念.本文将对这两个模型进行介绍和比较,让大家了解它们的区别和联系. 目录 前言 OSI7层模型 TCP/IP模型 OSI7层模型 ...

  2. Bash 编程

    原文:https://seankross.com/the-unix-workbench/bash-programming.html[1] 数学 创建math.sh: #!/usr/bin/env ba ...

  3. 疑难杂记:Chirp信号相关的参数解释

    图1 FMCW雷达信号参数 在德州仪器TI毫米波雷达中,开发板参数配置往往涉及如图1所示的信号参数. 宏观上看,信号参数包括\(ADC\)采样时间.脉冲重复周期(\(Chirp\)扫频周期)和帧时间( ...

  4. flutter系列之:做一个图像滤镜

    目录 简介 我们的目标 带滤镜的图片 打造filter按钮 打造可滑动按钮 最后要解决的问题 简介 很多时候,我们需要一些特效功能,比如给图片做个滤镜什么的,如果是h5页面,那么我们可以很容易的通过c ...

  5. idea设置字体大小(换主题后的字体大小设置)

    如果你是默认主题 直接这样设置字体大小 如果你换了自定义主题 如果你换了自定义主题,那么上面的设置方法会没有作用,我们需要像下面这样设置:

  6. WebAPI公开接口请求签名验证

    前言 现在的系统后端开发的时候,会公开很多API接口 对于要登录认证后才能访问的接口,这样的请求验证就由身份认证模块完成 但是也有些接口是对外公开的,没有身份认证的接口 我们怎么保证接口的请求是合法的 ...

  7. 楠少音乐盒(PC端)突破校园网限制

    楠少音乐盒 突破校园网限制 最近在将音乐盒从web迁移到PC端,过程中的记录 在我们学校,工作时间内(周一至周五为工作日,下午上班时间)校园网都会拦截一些与工作无关的网站,例如购物.炒股.游戏.音乐等 ...

  8. Cisco命令中login和login local的区别

    login是开启远程登录密码验证,login local不但要求密码,还要求提供用户名 如果同时设置login和login local,login local有效 (config-line)#line ...

  9. Day03_Java_作业

    A:选择题 1.给出以下代码,请问表达式grade==70在以下两条语句中是否获得执行? boolean flag = false && grade == 70;//第一条语句 boo ...

  10. ArrayList按指定大小分割集合

    ArrayList按指定大小分割集合 项目中使用SpringDataJpa的使用,用到了批量操作,发现框架本身有限制,长度不能超过1000,所以就百度了一下,网上都说是分段处理,也有说用OR的,但数据 ...