我想在绘图上写文本,但是我注意到当我使用matplotlib的平移(P键+鼠标拖动)移动水平位置并且文本超出绘图区域时,它仍然出现。我希望它的位置超过x轴的限制后消失。
这是一张让自己更加清晰的照片:
不应在右侧添加注释。仅当注释的位置在x轴内时才应显示。
这是我的代码:
from matplotlib.pyplot import figure, show
import numpy as np
fig = figure()
ax = fig.add_subplot(111, xlim=(0,1), ylim=(0,1), autoscale_on=False)
x,y = np.random.rand(2,200)
ax.scatter(x,y)
ax.text(np.mean(x), np.max(y), 'A',
rotation = 0,
ha = 'center',
fontsize = 15,
bbox=dict(facecolor='yellow',edgecolor='black', boxstyle='round'))
show()
编辑:设置clip_on=True
会使注释消失,因为注释应该在垂直轴最大值的上方。在下面的图片中,左侧显示了将该参数设置为True
时会发生的情况;在右边,所需的图像。
答案 0 :(得分:2)
使用clip_on=True
时,默认的剪切路径(即剪切艺术家的区域)是轴。在这里,您只想沿x方向裁剪轴范围。在y方向上,您想剪切图形范围。这可以通过使用自定义剪辑路径来实现。
这种剪辑路径可以是matplotlib补丁,例如Rectangle
。然后,可以在混合坐标系中定义矩形,以使其在轴坐标中沿x方向从0延伸到1,在图形坐标中沿y方向从0延伸到1。通过将文本的剪切路径设置为由此定义的矩形,可以通过x轴和y方向的图形剪切文本。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.transforms as mtrans
fig = plt.figure()
ax = fig.add_subplot(111, xlim=(0,1), ylim=(0,1), autoscale_on=False)
x,y = np.random.rand(2,200)
ax.scatter(x,y)
trans = mtrans.blended_transform_factory(ax.transAxes, fig.transFigure)
clippath = plt.Rectangle((0,0), 1, 1, transform=trans, clip_on=False)
txt = ax.text(np.mean(x), np.max(y), 'A',
rotation = 0,
ha = 'center',
fontsize = 15,
bbox=dict(facecolor='yellow',edgecolor='black', boxstyle='round'),
clip_on=True)
txt.set_clip_path(clippath)
plt.show()