惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
DataBreaches.Net
罗磊的独立博客
M
MIT News - Artificial intelligence
G
Google Developers Blog
V
V2EX
D
Docker
博客园_首页
The Cloudflare Blog
人人都是产品经理
人人都是产品经理
Y
Y Combinator Blog
WordPress大学
WordPress大学
T
Tailwind CSS Blog
博客园 - 司徒正美
J
Java Code Geeks
L
LangChain Blog
博客园 - 三生石上(FineUI控件)
B
Blog RSS Feed
博客园 - 【当耐特】
小众软件
小众软件
Apple Machine Learning Research
Apple Machine Learning Research
大猫的无限游戏
大猫的无限游戏
P
Proofpoint News Feed
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - Franky

博客园 - 提高效率!

Python多进程处理数据 内网配置深度学习环境 Vscode个人配置喜好记录 python读取tfrecord单个数据 用python直接提取gee数据的value(无需下载) 从tiff影像中提取多个点的像素值 WSL下挂载移动硬盘 ubuntu统计当前目录下的文件数量 常见的距离算法和相似度计算方法 常用的坐标系及其EPSG编码 仿 GEE 的平台汇总 stata 学习 matplotlib 颜色速查 解决proplot和Matplotlib版本冲突问题 Landsat 使用QA波段去云 将社会脆弱性纳入高分辨率全球洪水风险绘图 Python绘图代码snippets Micro-Estimates of Wealth for all Low 数据搜集 Latex 符号速查表 Ubuntu 服务器常用命令
Matplotlib 设置画布
提高效率! · 2024-12-19 · via 博客园 - 提高效率!

首先我们要理解plt, figure和ax三者的关系。

plt是Matplotlib.pyplot的简称,内部的各种API可以理解成是plt作者给用户准备的懒人包,自动定义一个初始绘图环境,开箱即用。缺点是不够灵活。

而figure可以理解成一个桌面,而每个axes就是桌面上的一张张纸或画布。如下图所示,两者是互相包含的关系。而我们最终的图是画在一张张axes上的。一个figure可以包含多张axes。通过分别定义figure和axes,我们可以更精准地控制每张图的参数,画出更复杂、美丽的组图

image

因此,当熟悉以上概念,下面来分不同场景或需求,介绍下建议使用的API

  1. 如果你只是做简单的可视化,画出的图甚至不需要保存,仅仅看一眼,也不关心后续的扩展,使用plt足矣。它等于直接帮你弄来了一个用一张白纸铺满的桌子,直接就可以上手画图。定义一批数据,使用plt.plot()函数绘制曲线,效果如下。
import numpy as np
import matplotlib.pyplot as plt
x = range(-100,100)
y = [i*i for i in x]
plt.plot(x,y)

image

  1. 如果你需要对绘制的图有精准的控制,那么就需要将figure和axes分开定义了,如plt.subplots().代码中分别定义了四个变量:ax11,ax12,ax21,ax22代表四个axes,并分别Plot。这里需要清楚的一点是,plt类中包含的大部分绘图函数,在axes类中也有,例如plt.plot()与ax.plot(), plt.scatter()与ax.scatter()。plt.tight_layout()语句往往用于多axes排版有误的情况(Adjust the padding between and around subplots.)
import numpy as np
import matplotlib.pyplot as plt
x = range(-100,100)
y = [i*i for i in x]
fig,((ax11,ax12),(ax21,ax22)) = plt.subplots(2,2)
ax11.plot(x,y)
ax12.plot(x,y)
ax21.plot(x,y)
ax22.plot(x,y)
plt.tight_layout()

image

  1. 但是按第三条的做法,当我们需要排版大量的子图(axes)时,由于每个子图都要分别定义、调用,工作量会十分冗余。此时比较灵活的是使用add_subplot()。且这种方式可以明确的定义每一步的行为,且可以套用循环,清晰明了。因此在日常工作中,我也常常会采用这种绘图方式。即使仅需要绘制一张图,也可以用add_subplot(1,1,1)来定义,为后续扩展留下空间。
import numpy as np
import matplotlib.pyplot as plt
x = range(-100,100)
y = [i*i for i in x]
fig = plt.figure() #定义figure,后面的axes都是在这张figure上绘制
for i in range(8):
    ax = fig.add_subplot(4,2,i+1) #这里的4,2是固定值,i+1是因为Python默认从0开始数数
    ax.plot(x,y)
plt.tight_layout()

image