Matplotlib 设置画布

首先我们要理解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

posted @   GeoRepublic  阅读(32)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示