У меня есть фигура, содержащая подстроки 3x2, и я хотел бы установить фоновый цвет в средней паре подзаголовков, чтобы сделать более ясным, какие метки осей принадлежат к какой подзаголовке.
Настройка facecolor
при построении подзаголовки изменяет только цвет области, определяемой осями; метки меток и оси по-прежнему нарисованы на figure.patch
. Предполагая, что нет простого способа сделать это, я мог бы добавить прямоугольный патч за соответствующими экземплярами в figure.axes
.
После небольшого эксперимента, похоже, что figure.axes[x].get_position()
возвращает Axes coördinates (нормализованные coördinates [0.0-1.0]), но Rectangle()
, похоже, хочет отображать coördinates (пиксели). Этот код более или менее работает (ED: в интерактивном режиме, но при выводе на png (с использованием средства рендеринга Agg) позиционирование прямоугольника полностью отключается):
import matplotlib.pyplot as plt
import matplotlib
f = plt.figure()
plt.subplot( 121 )
plt.title( 'model' )
plt.plot( range(5), range(5) )
plt.xlabel( 'x axis' )
plt.ylabel( 'left graph' )
plt.subplot( 122 )
plt.title( 'residuals' )
plt.plot( range(5), range(5) )
plt.xlabel( 'x axis' )
plt.ylabel( 'right graph' )
plt.tight_layout(pad=4)
bb = f.axes[0].get_position().transformed( f.transFigure ).get_points()
bb_pad = (bb[1] - bb[0])*[.20, .10]
bb_offs = bb_pad * [-.25, -.20]
r = matplotlib.patches.Rectangle( bb[0]-bb_pad+bb_offs, *(bb[1] - bb[0] + 2*bb_pad),
zorder=-10, facecolor='0.85', edgecolor='none' )
f.patches.extend( [r] )
но кажется очень хакерским, и мне кажется, что я пропустил что-то важное. Может кто-нибудь объяснить, что, есть ли более простой/лучший способ сделать это, и если да, то что это такое?
Поскольку мне действительно нужно писать в файл, у меня сейчас нет решения.