Я ищу элегантное решение для размещения метки фигуры (A, B, C) над углом каждого подзаголовка с использованием matplotlib, но каждый из них должен быть на одинаковом расстоянии от угла осей подзаговора. Проблема, с которой я сталкиваюсь, заключается в том, что типичные решения для маркировки используют дробь осей, поэтому легко разместить A, B, C в одном и том же месте относительно каждого графика.
import matplotlib as mpl
import matplotlib.pyplot as plt
fig, ax = plt.subplots(2,2, figsize = (10,10))
texts = ['A', 'B', 'C', 'D']
axes = fig.get_axes()
for a,l in zip(axes, texts):
a.annotate(l, xy=(-0.1, 1.1), xycoords="axes fraction", fontsize=15, weight = 'bold')
plt.suptitle('Label_Distance Consistent', fontsize = 20)
однако, если графики имеют разные размеры, вы получите метки, которые находятся на разном расстоянии от углов графиков (из-за соотношения сторон). См., например, этикетки A и C. Я ищу хороший способ обеспечить пропорциональное расстояние меток от углов осей для панелей, содержащих несколько подграфиков размеров/соотношений сторон, и/или явно установить текст на определенном расстоянии (в дюймах или, возможно, единицах измерения координат) от осей углы.
В прошлом я размещал квадратные оси одинакового размера в углу каждой оси подсюжета на панели, делал их невидимыми и масштабировал текст по ним, но это запутанный подход.
fig, ax = plt.subplots(2,2, figsize = (10,10))
ax1 = plt.subplot2grid((3, 3), (0, 0), colspan=3)
ax2 = plt.subplot2grid((3, 3), (1, 0), colspan=2)
ax3 = plt.subplot2grid((3, 3), (1, 2), rowspan=2)
ax4 = plt.subplot2grid((3, 3), (2, 0))
ax5 = plt.subplot2grid((3, 3), (2, 1))
axes = fig.get_axes()
texts = ['A', 'B', 'C', 'D', 'E']
for a,l in zip(axes, texts):
a.annotate(l, xy=(-0.1, 1.1), xycoords="axes fraction", fontsize=15, weight = 'bold')
plt.suptitle('Label Distance Inconsistent', fontsize = 20)