I придумал решение, которое представляет собой очень урезанный минимальный рабочий пример:
Код: Выделить всё
import numpy as np
import matplotlib.pyplot as plt
# generate some data
x = np.arange(0, 10, 0.1)
y1 = x**2
y2 = 0.5 * x**2
y3 = 1.5 * x**2
y4 = 2 * x**2
ys = [y1, y2, y3, y4]
z1 = -10 * y1
z2 = -11 * y2
z3 = -10.5 * y3
z4 = -9 * y4
zs = [z1, z2, z3, z4]
cols = 2
rows = 2
k = 0
fig, ax = plt.subplots(rows, cols, sharex=True, sharey=True)
ax2 = ax
for i in list(range(cols)):
for j in list(range(rows)):
ax[i,j].plot(x, ys[k], c='b')
ax[i,j].tick_params(colors='b')
ax2[i,j] = ax[i,j].twinx()
ax2[i,j].plot(x, zs[k], c='r')
ax2[i,j].tick_params(colors='r')
k = k+1
plt.show()

Здесь ось X и первая ось Y (синяя) хорошо распределяются между графиками, но вторая ось Y не имеет красного цвета.
Я предполагал, что, задав ax2 = ax в приведенном выше коде, он скопирует параметрsharey=True. Увы, это не работает.
Как заставить вторичную ось Y вести себя как первичную ось Y? Это означает, что отметки присутствуют на всех графиках, метки делений (числа) указаны только на самых крайних графиках, а ось Y масштабируется одинаково на всех графиках.
Имейте в виду, что я хотите сохранить итерацию по столбцам и строкам в скрипте, поскольку фактические отображаемые данные содержат более 60 панелей.
Подробнее здесь: https://stackoverflow.com/questions/791 ... ed-in-loop