【发布时间】:2013-02-05 16:52:18
【问题描述】:
我有一个包含 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] )
但看起来很老套,感觉我错过了一些重要的事情。谁能解释一下,是否有更简单/更好的方法,如果有,它是什么?
由于我确实需要写入文件,所以我目前没有解决方案。
【问题讨论】:
-
是的,类似。在该示例中,他们将补丁添加到轴(因此,如果轴移动,它会移动),但这需要它们通过剪辑进行抖动,因为对象位于轴的边界框之外。我想这表明没有更直接的方法可以做到这一点。问题变成了坐标系统是怎么回事?
标签: python matplotlib