Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Row titles for matplotlib subplot

In matplotlib, Is it possible to set a a separate title for each row of subplots in addition to the title set for the entire figure and the title set for each individual plot? This would correspond to the orange text in the figure below. enter image description here

If not, how would you get around this problem? Create a separate column of empty subplots to the left and fill them with the orange text?

I am aware that it is possible to manually position each single title using text() or annotate(), but that usually requires a lot of tweaking and I have many subplots. Is there a smoother solution?

like image 876
joelostblom Avatar asked Dec 11 '14 15:12

joelostblom


People also ask

How do you add a title to a 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 title. set_text() method to set title to the subplots in Matplotlib.

How do you give a subplot a title in Matlab?

There is a command suptitle, which puts the title of all subplots.


1 Answers

An idea is to create three "big subplots", to give each of them a title, and make them invisible. On the top of that you can create your matrix of smaller subplots.

This solution is entirely based on this post, except that more attention has been paid to actually removing the background subplot.

enter image description here

import matplotlib.pyplot as plt  fig, big_axes = plt.subplots( figsize=(15.0, 15.0) , nrows=3, ncols=1, sharey=True)   for row, big_ax in enumerate(big_axes, start=1):     big_ax.set_title("Subplot row %s \n" % row, fontsize=16)      # Turn off axis lines and ticks of the big subplot      # obs alpha is 0 in RGBA string!     big_ax.tick_params(labelcolor=(1.,1.,1., 0.0), top='off', bottom='off', left='off', right='off')     # removes the white frame     big_ax._frameon = False   for i in range(1,10):     ax = fig.add_subplot(3,3,i)     ax.set_title('Plot title ' + str(i))  fig.set_facecolor('w') plt.tight_layout() plt.show() 
like image 61
snake_charmer Avatar answered Sep 20 '22 19:09

snake_charmer