我有一个包含3x2个子图的图形,我想在中间一对子图上设置背景颜色,以便更清楚地显示哪个坐标轴标签属于哪个子图。
在构建子图时设置
经过一些尝试,似乎
在构建子图时设置
facecolor
仅更改由轴定义的区域的颜色;刻度和轴标签仍然绘制在figure.patch
上。 假设没有简单的方法来解决这个问题,我可以在figure.axes
中的相关实例后面添加矩形补丁。经过一些尝试,似乎
figure.axes[x].get_position()
返回轴坐标(标准化坐标[0.0-1.0]),但Rectangle()
似乎需要显示坐标(像素)。 这段代码基本上有效(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] )
这种做法似乎很hackish,而且感觉自己错过了重要的东西。是否有人可以解释一下,是否有更简单/更好的方法来实现这个目标?如果有,它是什么呢?
由于我确实需要写入文件,目前我还没有找到解决方案。