合并两个 matplotlib 图形,并排,高质量

jon*_*onb 5 plot matplotlib

我生成了两个 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?

并排绘制两个图形

在 Matplotlib 中向子图添加图形

它们不相关,因为大多数情况下它们建议改变初始绘图的创建方式。我不想改变它 - 我想按原样使用该图。

我只需要将 Fig1 放在 Fig2 的左侧即可。不改变 Fig1 或 Fig2 的创建方式。

我还尝试使用 PIL 方法:https://note.nkmk.me/en/python-pillow-concat-images/ 但是它的质量较低

Ste*_*tef 7

您可以使用后端将图形渲染为数组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)

在此输入图像描述