【matplotlib基础】--手绘风格

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():

python 复制代码
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 越小,弯曲程度越低。

python 复制代码
for scale in [0.5, 2, 10]:
    with plt.xkcd(scale=scale):
        draw()



2.2. length 参数

length 参数控制每个弯曲的长度,也就是 length越大,弯曲的越平滑。

python 复制代码
for length in [1, 10, 100]:
    with plt.xkcd(length=length):
        draw(f"length 参数 = {length}")



2.3. randomness 参数

randomness 参数控制产生弯曲的随机性,randomness越大,产生的弯曲处越多。

python 复制代码
for randomness in [1, 10, 100]:
    with plt.xkcd(randomness=randomness):
        draw(f"randomness 参数 = {randomness}")



相关推荐
yannan2019031320 分钟前
【算法】(Python)动态规划
python·算法·动态规划
蒙娜丽宁30 分钟前
《Python OpenCV从菜鸟到高手》——零基础进阶,开启图像处理与计算机视觉的大门!
python·opencv·计算机视觉
光芒再现dev32 分钟前
已解决,部署GPTSoVITS报错‘AsyncRequest‘ object has no attribute ‘_json_response_data‘
运维·python·gpt·语言模型·自然语言处理
好喜欢吃红柚子1 小时前
万字长文解读空间、通道注意力机制机制和超详细代码逐行分析(SE,CBAM,SGE,CA,ECA,TA)
人工智能·pytorch·python·计算机视觉·cnn
小馒头学python1 小时前
机器学习是什么?AIGC又是什么?机器学习与AIGC未来科技的双引擎
人工智能·python·机器学习
神奇夜光杯1 小时前
Python酷库之旅-第三方库Pandas(202)
开发语言·人工智能·python·excel·pandas·标准库及第三方库·学习与成长
千天夜1 小时前
使用UDP协议传输视频流!(分片、缓存)
python·网络协议·udp·视频流
测试界的酸菜鱼1 小时前
Python 大数据展示屏实例
大数据·开发语言·python
羊小猪~~1 小时前
神经网络基础--什么是正向传播??什么是方向传播??
人工智能·pytorch·python·深度学习·神经网络·算法·机器学习
放飞自我的Coder2 小时前
【python ROUGE BLEU jiaba.cut NLP常用的指标计算】
python·自然语言处理·bleu·rouge·jieba分词