Удалите подзаговор matplotlib и избегайте пустых полей - PullRequest
0 голосов
/ 23 апреля 2020

Хотя кажется, что довольно легко удалить подспот / ось matplotlib, например, с помощью delaxes:

fig, ax = plt.subplots(3,1, sharex=True)
for ii in range(3):
    ax[ii].plot(arange(10), 2*arange(10))
fig.delaxes(ax[1])

Это всегда оставит пробел в месте удаленный участок / оси.

Похоже, что ни одно из предложенных решений не исправляет это: Удалить подспот и удалить пробел перед его отображением или сохранением?

Я в основном ищу самый простой способ перенести оставшийся субплот в «плотную» сетку, чтобы не было пробелов, в которых субплот был ранее, возможно, лучше, чем воссоздать новый (суб) участки.

1 Ответ

1 голос
/ 23 апреля 2020

Моей первой идеей было очистить все данные на рисунке, воссоздать подзаговоры и снова построить те же данные.

И это работает, но копирует только данные. Если у графика есть некоторые изменения, то новый график потеряет его - или вам придется скопировать также свойства.

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()

До изменение геометрии

enter image description here

После изменение геометрии

enter image description here

...