Моей первой идеей было очистить все данные на рисунке, воссоздать подзаговоры и снова построить те же данные.
И это работает, но копирует только данные. Если у графика есть некоторые изменения, то новый график потеряет его - или вам придется скопировать также свойства.
from matplotlib import pyplot as plt
# original plots
fig, axs = plt.subplots(1,3)
axs[0].plot([1,2],[3,4])
axs[2].plot([0,1],[2,3])
fig.delaxes(axs[1])
# keep data
data0 = axs[0].lines[0].get_data()
data2 = axs[2].lines[0].get_data()
# clear all in figure
fig.clf()
# create again axes and plot line
ax0 = fig.add_subplot(1,2,1)
ax0.plot(*data0)
# create again axis and plot line
ax1 = fig.add_subplot(1,2,2)
ax1.plot(*data2)
plt.show()
Но когда я начал копаться в коде, я обнаружил, что каждый axes
сохраняет позицию субплота (ie. (1,3,1)
) как свойство "geometry"
import pprint
pprint.pprint(axs[0].properties())
pprint.pprint(axs[1].properties())
и имеет .change_geometry()
для его изменения
from matplotlib import pyplot as plt
fig, axs = plt.subplots(1,3)
axs[0].plot([1,2],[3,4])
axs[2].plot([0,1],[2,3])
fig.delaxes(axs[1])
# chagen position
axs[0].change_geometry(1,2,1)
axs[2].change_geometry(1,2,2)
plt.show()
До изменение геометрии
После изменение геометрии