Question: 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](https://i.stack.imgur.com/K7950.png)

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?

Answer: 
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](https://stackoverflow.com/questions/6963035/pyplot-axes-labels-for-subplots), except that more attention has been paid to actually removing the background subplot.

![enter image description here](https://i.stack.imgur.com/Mw6OB.png)

```
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()

```
Another easy cheat is to give the title of the middle column as `subplot row XX\n\nPlot title No.YY`