繁体   English   中英

matplotlib 将矩形添加到图而不是轴

[英]matplotlib add rectangle to Figure not to Axes

我需要在我的 matplotlib 图上添加一个半透明的皮肤。 我正在考虑向图中添加一个矩形,其中 alpha <1 和一个足够高的 zorder,以便它绘制在所有内容之上。

我在想类似的事情

figure.add_patch(Rectangle((0,0),1,1, alpha=0.5, zorder=1000))

但我猜矩形只能由 Axes 处理。 有转机吗?

google其他人的迟到答案。

实际上有一种简单的方法,没有幻影轴,接近你原来的愿望。 Figure对象有一个patches属性,你可以添加矩形:

fig, ax = plt.subplots(nrows=1, ncols=1)
ax.plot(np.cumsum(np.random.randn(100)))
fig.patches.extend([plt.Rectangle((0.25,0.5),0.25,0.25,
                                  fill=True, color='g', alpha=0.5, zorder=1000,
                                  transform=fig.transFigure, figure=fig)])

给出以下图片(我使用的是非默认主题):

绘图与矩形附加到图

transform参数使它使用图级坐标,我认为这就是你想要的。

您可以在图形顶部使用幻像轴,并根据需要更改修补程序,请尝试以下示例:

import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
ax.xaxis.set_visible(False)
ax.yaxis.set_visible(False)
ax.set_zorder(1000)
ax.patch.set_alpha(0.5)
ax.patch.set_color('r')

ax2 = fig.add_subplot(111)
ax2.plot(range(10), range(10))

plt.show()

如果您不使用子图,则使用gca()会很容易。

from matplotlib.patches import Rectangle
fig = plt.figure(figsize=(12,8))
plt.plot([0,100],[0,100])
plt.gca().add_patch(Rectangle((25,50),15,15,fill=True, color='g', alpha=0.5, zorder=100, figure=fig))

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM