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. .net Assembly.Load重复加载程序集造成执行异常

    最近ET做热更重载dll的时候,返回登陆会重新检测新的dll,首次登录之前已经Assembly.Load()过一次dll,第二次返回登陆再次load dll到内存中,Invoke执行方法的时候,异常了 ...

  2. Vue——计算属性、监听属性、Vue生命周期、组件介绍和使用、组件间通信、ref属性

    计算属性 // 1 计算属性是基于他们的依赖变量进行缓存的 // 2 计算属性只有在它的相关依赖变量发生改变时才会重新求值,否则不会变(函数只要页面变化,就会重新运算) // 3 计算属性就像pyth ...

  3. cmd+ssh配置远程服务器Anaconda3_2023+pytorch

    一.上传Anaconda3到远程服务器 注意:如果要将这个东西安装在anaconda3文件夹里的话,当前这个目录里不能有这个文件夹.(安的时候会自动创建) 二.安装Anaconda3 1. win+r ...

  4. ChatGPT的原理与前端领域实践

    一.ChatGPT 简介 ChatGPT的火爆 ChatGPT作为一个web应用,自22年12月发布,仅仅不到3个月的时间,月活用户就累积到1亿.在此之前,最快记录的保持者也需要9个月才达到月活1亿. ...

  5. 2023-06-10:给定一个由 n 个节点组成的网络,用 n x n 个邻接矩阵 graph 表示 在节点网络中,只有当 graph[i][j] = 1 时,节点 i 能够直接连接到另一个节点 j。

    2023-06-10:给定一个由 n 个节点组成的网络,用 n x n 个邻接矩阵 graph 表示 在节点网络中,只有当 graph[i][j] = 1 时,节点 i 能够直接连接到另一个节点 j. ...

  6. STL-deque(ACM)

    1.两段都可以插入和删除(头 插入删除 尾 插入删除) 普通队列无法用pop_back()删除队列最后的元素,类似地,由于普通队列只能插入头删除,所以push().pop()无需带_front()._ ...

  7. JNI c++ 与 java 通信过程

    JNI(Java Native Interface)是Java提供的一种机制,用于在Java和本地C/C++代码之间进行通信.下面是JNI C++与Java通信的一般过程: 1. 编写Java代码:首 ...

  8. 解决phpMyAdmin点击"结构"列页面失去响应的问题

    最后更新时间 2017-12-05. 我的环境: phpMyAdmin:4.0.4.1 PHP:5.6.11 第一步 关闭自动更新 打开 ./libraries 目录下的 vendor_config. ...

  9. PHP echo 和 print 语句

    在 PHP 中,有两种基本的输出方法:echo 和 print. PHP echo 和 print 语句 echo 和 print 之间的差异: echo - 能够输出一个以上的字符串 print - ...

  10. Java实现数组去重复的18种写法

    说明 数组(含List)去重复在日常工作中经常遇到,很多时候用到Set数据结构,但有时候我们需要针对数据进行干预,这时候就需要用其他的实现方式了.以下列出各种的去重方式,基本含括了所有情况. 源码下载 ...