首页编程开发Matplotlib【数据可视化(Matplo...

【数据可视化(Matplotlib篇)】19.子图布局函数subplots()

本系列文章配套代码获取有以下两种途径:

  • 通过百度网盘获取:
链接:https://pan.baidu.com/s/1jG-rGG4QMuZu0t0kEEl7SA?pwd=mnsj 提取码:mnsj
  • 前往GitHub获取
https://github.com/returu/Data_Visualization





01

函数语法


subplots()函数相比上一篇文章中介绍的subplot()函数,增加了许多功能,语法如下:
fig,ax=plt.subplots(nrows=1,
                   ncols=1,
                   sharex=False,
                   sharey=False,
                   **fig_kw
                   )

主要参数意义如下:
  • nrows:子图的行数,默认是1。
  • ncols子图列数,默认是1。
  • sharex、sharey:是否共享x轴或y轴(所有子图应使用相同的x轴、y轴刻度,调整xlimylim将影响所有子图,取值包括:none、all、row、col,默认为False。
  • squeeze:是否挤压,默认为True。如果True,则可能情况如下:如果构造一个子图,则建立单个Axes对象返回;如果建立(N×1)(1×N)的子图布局返回一维数组Axes对象;如果建立(M)的子图布局(N>1,M>1返回二维数组Axes对象。如果是False,则不进行挤压,返回的是含Axes对象的2D数组。
  • subplot_kw:带有传递给add_subplot用于建立每个子图调用的关键词字典,如subplot_kw={‘aspect’:’equal’},相当于设定x轴和y轴单位长度相同。
  • gridspec_kw:带有传递给构造函数的关键词字典,GridSpec构造函数可用于建立放置子图的网格。
  • **fig_kw:额外的关键词参数,可用于pyplot.figure()函数的调用。上述函数的回传值是图表对象,是对象的数组。

subplots()函数可以方便地创建子图网格,该函数会创建一个新的窗口图表Figure对象并返回一个包含创建的子图axes对象的NumPy数组:

fig, axes = plt.subplots(2, 3)

axes
返回结果如下:
array([[<AxesSubplot:><AxesSubplot:><AxesSubplot:>],
       [<AxesSubplot:><AxesSubplot:><AxesSubplot:>]], dtype=object)

可以像二维数组一样对axes数组进行索引。例如,axes[0,1] 指的是第一行第二列的子图。

也可以通过以下方式遍历子图:

for ax in axes.flat:
    print(ax)

返回结果如下:

AxesSubplot(0.125,0.53;0.227941x0.35)
AxesSubplot(0.398529,0.53;0.227941x0.35)
AxesSubplot(0.672059,0.53;0.227941x0.35)
AxesSubplot(0.125,0.11;0.227941x0.35)
AxesSubplot(0.398529,0.11;0.227941x0.35)
AxesSubplot(0.672059,0.11;0.227941x0.35)


02

子图配置实例


使用subplots()函数创建2*2的子图布局方式:
x = np.linspace(0 , 10 , 100)

fig , ax = plt.subplots(2,2,figsize=(8,8))

ax[0,0].set_title("子图1")
ax[0,0].plot(x+5,np.power(x,1)*8)

ax[0,1].set_title("子图2")
ax[0,1].plot(x+8,np.power(x,2)+20)

ax[1,0].set_title("子图3")
ax[1,0].plot(x*2,np.power(x,0.5)*30)

ax[1,1].set_title("子图4")
ax[1,1].plot(x,np.power(x,4)/100)

plt.tight_layout()
plt.show()
可视化效果如下图所示:

在子图布局的基础上,
通过设置参数sharex=True、sharey=True实现坐标轴享(各子图的坐标轴的刻度均一致);
通过遍历子图的方式,然后使用set(xlabel=” ” ,ylabel=” “)函数为各子图统一添加轴标签,使用label_outer()函数隐藏内侧的刻度标记和刻度标签。
x = np.linspace(0 , 10 , 100)

fig , ax = plt.subplots(2,2,figsize=(8,8),sharex=True,sharey=True# 共享坐标轴

ax[0,0].set_title("子图1")
ax[0,0].plot(x+5,np.power(x,1)*8)

ax[0,1].set_title("子图2")
ax[0,1].plot(x+8,np.power(x,2)+20)

ax[1,0].set_title("子图3")
ax[1,0].plot(x*2,np.power(x,0.5)*30)

ax[1,1].set_title("子图4")
ax[1,1].plot(x,np.power(x,4)/100)

# 遍历子图
for a in ax.flat:
    a.set(xlabel="X轴" ,ylabel="Y轴" ) # 添加轴标签
    a.label_outer() # 隐藏子图内侧的刻度标记和标签

plt.tight_layout()
plt.show()
可视化效果如下图所示:


更多内容可以前往官网查看
https://matplotlib.org/stable/


本篇文章来源于微信公众号: 码农设计师

RELATED ARTICLES

欢迎留下您的宝贵建议

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Recent Comments