69

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
  • 43,885
  • 25
  • 111
  • 113
Jeff
  • 6,514
  • 6
  • 41
  • 70

3 Answers3

144

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
  • 26,545
  • 9
  • 43
  • 50
Jeff
  • 6,514
  • 6
  • 41
  • 70
28
ax.set_visible(False)

will suffice in most cases.

naught101
  • 17,437
  • 19
  • 85
  • 133
0

Remove the axis from the figure doc:

axs[1].remove()
stansy
  • 75
  • 1
  • 8