Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Matplotlib: how to add xlabel, title to each subplot

I'm trying to plot multiple heatmaps using the plt.subplots. An example I found is as follows:

import numpy as np
import matplotlib.pyplot as plt

# Generate some data that where each slice has a different range
# (The overall range is from 0 to 2)
data = np.random.random((4,10,10))
data *= np.array([0.5, 1.0, 1.5, 2.0])[:,None,None]

# Plot each slice as an independent subplot
fig, axes = plt.subplots(nrows=1, ncols=4,figsize=(12,3))
i=0
for dat, ax in zip(data, axes.flat):
    # The vmin and vmax arguments specify the color limits
    im = ax.imshow(dat, vmin=0, vmax=2,cmap='Reds')
    # ax.xlabel(str(i))
    # ax.ylabel(str(i))
    i += 1

# Make an axis for the colorbar on the right side
cax = fig.add_axes([0.95, 0.155, 0.03, 0.67])
fig.colorbar(im, cax=cax)

figtype = 'jpg'
fig.savefig('aaa.jpg',format = figtype,bbox_inches='tight')
fig.tight_layout()

The code succeeds if I comment the following two lines (which is done in the above example):

ax.xlabel(str(i))
ax.ylabel(str(i))

If I use the two lines, I get errors saying:

AttributeError: 'AxesSubplot' object has no attribute 'xlabel'

How can I make it correct?

Thank you all for helping me!!!

like image 367
pfc Avatar asked Aug 11 '17 09:08

pfc


People also ask

How do you give titles to each subplot?

If you use Matlab-like style in the interactive plotting, then you could use plt. gca() to get the reference of the current axes of the subplot and combine set_title() method to set title to the subplots in Matplotlib.

How do you label individual subplots in Python?

Labelling subplots is relatively straightforward, and varies, so Matplotlib does not have a general method for doing this. Simplest is putting the label inside the axes. Note, here we use pyplot. subplot_mosaic , and use the subplot labels as keys for the subplots, which is a nice convenience.


1 Answers

When using the matplotlib object-oriented interface, the correct commands to use are ax.set_xlabel and ax.set_ylabel.

(Compare these to plt.xlabel, etc., for the state-machine interface).

Likewise, to set a title, you need ax.set_title

You can see all the available methods for an axes instance in the api docs, here.

like image 159
tmdavison Avatar answered Sep 21 '22 16:09

tmdavison