是否将matplotlib矩形边设置为指定宽度之外?

2024-06-17 10:25:11 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有一种方法可以指定matplotlib's Rectangle patch的边缘,以便边界在指定的域之外?例如,在photoshop中,这被称为“笔划位置”。请允许我举例说明:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle


# Here's my "image"
X = np.arange(16).reshape(4,4)

# Suppose I want to highlight some feature in the middle boxes.
fig = plt.figure()
ax = fig.add_subplot(111)
ax.imshow(X, cmap=plt.cm.gray, interpolation='nearest')
ax.add_patch( Rectangle((0.5, 0.5), 2, 2, fc='none', ec='r') )
plt.show()

结果如下:

enter image description here

但是,如果对上述内容进行如下修改

^{pr2}$

我得到了这个数字:

enter image description here

如您所见,边位于矩形对象域边界的中心,因此流入该域。是否可以强制边缘边界严格超出矩形的域?在


Tags: 方法importaddmatplotlibasnpfigplt
1条回答
网友
1楼 · 发布于 2024-06-17 10:25:11

您可以使用一个AnnotationBbox,其中一个AuxTransformBox被放在里面。此AuxTransformBox将包含一个所需大小的代理矩形。这可以使其不可见(例如fc='none', ec='none')。它的唯一功能是将AuxTransformBox缩放到合适的大小。现在,AnnotationBbox可以被赋予一个大线宽的边框。如果它紧靠着AuxTransformBox,那么边界将只从AuxTransformBox结束的地方开始。为了使边框紧密贴合,可以将填充pad设置为边框线宽的一半。因为padding是以fontsize为单位的,所以需要将fontsize设置为线宽,并将padding设置为0.5,pad=0.5,fontsize=linewidth。请注意,0.52这个稍微大一点的填充在图上看起来更好看;在任何情况下都可以根据自己的喜好进行调整。在

听起来很复杂,但是代码是可复制的,可以粘贴到通常使用矩形的任何地方。在

^{1}$

enter image description here

相关问题 更多 >