我生成了两个 matplotlib 图形,尺寸为 1000x1000。每个图都是基于 4x4 子图的图。我想要一个尺寸为 1000x2000(宽度为 2000)的图形。
fig1
<Figure size 1000x1000 with 4 Axes>
fig2
<Figure size 1000x1000 with 4 Axes>
Run Code Online (Sandbox Code Playgroud)
现在我想把它们结合在一起。
我搜索了很多参考文献: How to make multipleplots side-by-side using Python?
它们不相关,因为大多数情况下它们建议改变初始绘图的创建方式。我不想改变它 - 我想按原样使用该图。
我只需要将 Fig1 放在 Fig2 的左侧即可。不改变 Fig1 或 Fig2 的创建方式。
我还尝试使用 PIL 方法:https://note.nkmk.me/en/python-pillow-concat-images/ 但是它的质量较低
您可以使用后端将图形渲染为数组agg。然后并排连接数组并切换回正常后端以显示结果:
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
backend = mpl.get_backend()
mpl.use('agg')
dpi = 100
fig1,_ = plt.subplots(2,2, figsize=(1000/dpi, 1000/dpi), dpi=dpi)
fig1.suptitle('Figure 1')
fig2,_ = plt.subplots(2,2, figsize=(1000/dpi, 1000/dpi), dpi=dpi)
fig2.suptitle('Figure 2')
c1 = fig1.canvas
c2 = fig2.canvas
c1.draw()
c2.draw()
a1 = np.array(c1.buffer_rgba())
a2 = np.array(c2.buffer_rgba())
a = np.hstack((a1,a2))
mpl.use(backend)
fig,ax = plt.subplots(figsize=(2000/dpi, 1000/dpi), dpi=dpi)
fig.subplots_adjust(0, 0, 1, 1)
ax.set_axis_off()
ax.matshow(a)
Run Code Online (Sandbox Code Playgroud)