#【matplotlib】21.多图合并
2023.1.20
- python3、numpy、pandas、matplotlib完结
新年快乐@!!
21.1 多合一显示
21.1.1 均匀分布
方法很简单 就是一张图 分几块 第一张占几块 从哪开始;第二张…
plt.subplot()
# 打开一个窗口
import matplotlib.pyplot as plt
plt.figure()
<Figure size 432x288 with 0 Axes>
#表示将整个图像窗口分为2行2列, 当前位置为1.
plt.subplot(2,2,1)
#上面这个未知的图像
plt.plot([0,1],[0,1])
#图2
plt.subplot(2,2,2)
plt.plot([0,1],[0,2])
#图3 plt.subplot(223)=plt.subplot(2,2,3)
plt.subplot(223)
plt.plot([0,1],[0,3])
#图4
plt.subplot(224)
plt.plot([0,1],[0,4])
plt.show() # 展示
21.1.2 不均匀分布
plt.figure()
# 图像窗口分为2行1列, 当前位置为1.
plt.subplot(2,1,1)
plt.plot([0,1],[0,1])
#图像窗口分为2行3列, 当前位置为4
plt.subplot(2,3,4)
plt.plot([0,1],[0,2])
# 图像窗口分为2行3列, 当前位置为5,6
plt.subplot(235)
plt.plot([0,1],[0,3])
plt.subplot(236)
plt.plot([0,1],[0,4])
plt.show() # 展示
21.2 分隔显示
plt.subplot2grid()
也是图分几块,从哪个开始,夸几格
import matplotlib.pyplot as plt
plt.figure()
# 3*3的图,(0,0)开始画 跨3列
ax1 = plt.subplot2grid((3, 3), (0, 0), colspan=3)
ax1.plot([1, 2], [1, 2]) # 画小图
ax1.set_title('ax1_title') # 设置小图的标题
ax2 = plt.subplot2grid((3, 3), (1, 0), colspan=2)
ax3 = plt.subplot2grid((3, 3), (1, 2), rowspan=2)
ax4 = plt.subplot2grid((3, 3), (2, 0))
ax5 = plt.subplot2grid((3, 3), (2, 1))
# 上面画好格子了 我们在其中ax4里面画好相应的图
ax4.scatter([1, 2], [2, 2])
ax4.set_xlabel('ax4_x')
ax4.set_ylabel('ax4_y')
Text(0, 0.5, 'ax4_y')
这里面要注意的就是:colspan
,rowspan
,方向别弄错
colspan
:是跨列,所以是横着走了- rowspan`:是跨行,是纵着走
2. 方法2:gridspec
这个是用切片方法,说每个图位置
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
plt.figure()
# 3*3 的图
gs = gridspec.GridSpec(3, 3)
# gs[0, :]表示这个图占第0行和所有列
ax6 = plt.subplot(gs[0, :])
# 其他类似
ax7 = plt.subplot(gs[1, :2])
ax8 = plt.subplot(gs[1:, 2])
ax9 = plt.subplot(gs[-1, 0])
ax10 = plt.subplot(gs[-1, -2])
# 后面可以添加每个图的描述,例如ax10
ax10.plot([1, 2], [3, 2])
[<matplotlib.lines.Line2D at 0x1d9908c6c40>]
21.3 共享坐标轴
# 2行2列 ((ax11, ax12), (ax13, ax14))表示第1行从左至右 从上往下
f, ((ax11, ax12), (ax13, ax14)) = plt.subplots(2, 2, sharex=True, sharey=True)
# 创建图形 ax12,13,14
ax11.scatter([1,2], [1,2])
ax12.scatter([2,3], [3,4])
# plt.tight_layout()表示紧凑显示图像
plt.tight_layout()
plt.show()
21.4 次坐标轴
也就是一个图两个y轴
- 第一个坐标轴
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0, 10, 0.1)
y1 = 0.05 * x**2
y2 = -1 * y1
# figure默认的坐标系 ax1
fig, ax1 = plt.subplots()
- 第二个坐标轴
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0, 10, 0.1)
y1 = 0.05 * x**2
y2 = 1* x+5
# figure默认的坐标系 ax1
fig, ax1 = plt.subplots()
# 对ax1调用twinx()方法,生成如同镜面效果后的ax2,放到了右侧
ax2 = ax1.twinx()
ax1.plot(x, y1, 'g-') # 第一个轴产生图像green, solid line
ax1.set_xlabel('X data') # 设置x轴名字
ax1.set_ylabel('Y1 data', color='g')# 设置y1轴名字
# 第二个 图像和y2名字颜色
ax2.plot(x, y2, 'b-') # blue
ax2.set_ylabel('Y2 data', color='b')
plt.show()