How to put the title at the bottom of a figure in matplotlib?

23,057

Solution 1

Since you're not using the x axis you can just simply set the xlabel to act as the title, should take care of the positioning:

ax.set_xlabel('this really is a title disguised as an x label')

Edit:

Try offsetting the title according to the figure height, I hope this works:

size = fig.get_size_inches()*fig.dpi # get fig size in pixels
ax.set_title('(a)', y=-size) # increase or decrease y as needed

Solution 2

Here is a small python function that plot images without axis. Titles at the bottom of each sub-image. images is a n-length array with the images in memory and labels is a n-length array with the corresponding titles:

from matplotlib import pyplot

def plot_image_array_gray(images, labels):
  for i in range(0, len(labels)):
    ax = pyplot.subplot(1, len(labels), i + 1)
    pyplot.axis('off')
    pyplot.text(0.5, -0.1, labels[i], \
      horizontalalignment='center', verticalalignment='center', \
      transform=ax.transAxes)
    pyplot.imshow(images[i], cmap=pyplot.cm.gray)

  pyplot.tight_layout()
  pyplot.show()

Example of usage

# code to load image_a and image_b 
# ...
plot_image_array_gray((image_a, image_b), ("(a)", "(b)"))
Share:
23,057
Huayi Wei
Author by

Huayi Wei

Updated on July 09, 2022

Comments

  • Huayi Wei
    Huayi Wei almost 2 years

    I use matplotlib to plot a figure with four subfigures, and set_title method put the title ( (a) (b) (c) (d)) on the top of every subfigure, see the following code example.

    fig = pyplot.figure()
    ax = fig.add_subplot(1, 4, 1)
    ax.set_title('(a)')

    But I want to put every title at the bottom of every subfigure. I can't figure out it by the matplotlib document and google. So I need your help, thanks very much.

    enter image description here