不规则子图的绘制
在上一篇博客中我们将了如何绘制规则分布的子图,接下来我们将一下不规则子图的分布该如何操作。
思路:先将整个画布切分为nxm的格式,要求每一个子图都能由小格拼成,然后将子图包含的小格切出来就好
例:我们绘制如下图所示分布的子图,不同颜色为不同的
分析:我们将整个画布划分为5x4的布局,使得每一个子图都能由我们划分的小格组成。对于红色块,我们将它切出来,他的切法为[:3,:3];对于黄色块,它的切法为[:2,3:];对于绿色块,它的切法为[2,3:];对于紫色块,它的切法为[3:,:2];对于橙色块,它的切法为[3:,2:]
- 导入模块
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.gridspec import GridSpec
- 创建空白画布
plt.figure(figsize=(6,8),facecolor="gray")
plt.rcParams["axes.facecolor"] = "#0D0434" # 修改散点图背景颜色
plt.subplots_adjust(hspace=0.4, wspace=0.6) # 调整子图之间的间隔
- 分割画布,将画布分割为小单元
gs = GridSpec(5,4) # 将画布划分为5行4列
- 添加第一个子图
plt.subplot(gs[:3,:3])
x = np.arange(0, 2*np.pi, 0.1)
y1 = np.sin(x)
plt.scatter(x,y1)
- 添加第二个子图
plt.subplot(gs[:2,3:])
y2 = np.cos(x)
plt.scatter(x,y2)
- 添加第三个子图
plt.subplot(gs[2,3:])
y3 = np.sin(x)
plt.scatter(x,y3)
- 添加第四个子图
plt.subplot(gs[3:,:2])
y4 = np.cos(x)
plt.scatter(x,y4)
- 添加第五个子图
plt.subplot(gs[3:,2:])
y5 = np.sin(x)
plt.scatter(x,y5)
- 显示图像
plt.show()
效果如下:
完整代码:
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.gridspec import GridSpec
# 创建空白画布
plt.figure(figsize=(6,8),facecolor="gray")
# 修改散点图背景颜色
plt.rcParams["axes.facecolor"] = "#0D0434"
# 调整子图之间的间隔
plt.subplots_adjust(hspace=0.4,wspace=0.6)
# 分割画布,将画布分割为小单元
# 将画布划分为5行4列
gs = GridSpec(5,4)
# 添加第一个子图
plt.subplot(gs[:3,:3])
x = np.arange(0, 2*np.pi, 0.1)
y1 = np.sin(x)
plt.scatter(x,y1)
# 添加第二个子图
plt.subplot(gs[:2,3:])
y2 = np.cos(x)
plt.scatter(x,y2)
# 添加第三个子图
plt.subplot(gs[2,3:])
y3 = np.sin(x)
plt.scatter(x,y3)
# 添加第四个子图
plt.subplot(gs[3:,:2])
y4 = np.cos(x)
plt.scatter(x,y4)
# 添加第五个子图
plt.subplot(gs[3:,2:])
y5 = np.sin(x)
plt.scatter(x,y5)
plt.show()
,:2])
y4 = np.cos(x)
plt.scatter(x,y4)
添加第五个子图
plt.subplot(gs[3:,2:])
y5 = np.sin(x)
plt.scatter(x,y5)
plt.show()