80

I'm trying to figure out a way of deleting (dynamically) subplots in matplotlib. I see they have a remove method, but I get the error

NotImplementedError: cannot remove artist

I'm surprised that I can't find this anywhere. Does anyone know how to do this?

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

plt.draw()
plt.tight_layout()

enter image description here

Trenton McKinney
  • 56,955
  • 33
  • 144
  • 158
Jeff
  • 6,932
  • 7
  • 42
  • 72

3 Answers3

154

Use fig.delaxes or plt.delaxes to remove unwanted subplots

fig, axs = plt.subplots(1,3)
axs[0].plot([1,2],[3,4])
axs[2].plot([0,1],[2,3])

fig.delaxes(axs[1])

plt.draw()
plt.tight_layout()

enter image description here

tdy
  • 36,675
  • 19
  • 86
  • 83
Jeff
  • 6,932
  • 7
  • 42
  • 72
  • 1
    Many thanks for the answer! And how to get rid of the empty space in between the subplots now, and let two plots fill all the window width? tight_layout() doesn't work properly for me... – Roman Sverdlov Jul 12 '23 at 12:52
31
ax.set_visible(False)

will suffice in most cases.

naught101
  • 18,687
  • 19
  • 90
  • 138
4

Remove the axis from the figure doc:

axs[1].remove()
stansy
  • 135
  • 1
  • 10