Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

matplotlib shared row label (not y label) in plot containing subplots

Tags:

matplotlib

I have a trellis-like plot I am trying to produce in matplotlib. Here is a sketch of what I'm going for:

enter image description here

One thing I am having trouble with is getting a shared row label for each row. I.e. in my plot, I have four rows for four different sets of experiments, so I want row labels "1 source node, 2 source nodes, 4 source nodes and 8 source nodes".

Note that I am not referring to the y axis label, which is being used to label the dependent variable. The dependent variable is the same in all subplots, but the row labels I am after are to describe the four categories of experiments conducted, one for each row.

At the moment, I'm generating the plot with:

fig, axes = plt.subplots(4, 5, sharey=True)

While I've found plenty of information on sharing the y-axis label, I haven't found anything on adding a single shared row label.

like image 266
Bryce Thomas Avatar asked Oct 05 '22 11:10

Bryce Thomas


1 Answers

As far as I know there is no ytitle or something. You can use text to show some text. The x and y are in data-coordinates. ha and va are horizontal and vertical alignment, respectively.

import numpy
import matplotlib 
import matplotlib.pyplot as plt

n_rows = 4
n_cols = 5
fig, axes = plt.subplots(n_rows, n_cols, sharey = True)

axes[0][0].set_ylim(0,10)

for i in range(n_cols):
    axes[0][i].text(x = 0.5, y = 12, s = "column label", ha = "center")
    axes[n_rows-1][i].set_xlabel("xlabel")

for i in range(n_rows):
    axes[i][0].text(x = -0.8, y = 5, s = "row label", rotation = 90, va = "center")
    axes[i][0].set_ylabel("ylabel")

plt.show()
like image 67
Robbert Avatar answered Oct 10 '22 05:10

Robbert