如何在matplotlib中绘制一个轴外的线条(使用图形坐标)?

20

Matplotlib有一个函数可以在图坐标系中写文本(.figtext())。

是否有一种方法可以做同样的事情,但是画线呢?

特别是我的目标是绘制线来将y轴上的一些刻度分组。

1个回答

21
  • Python 3.8.12Matplotlib 3.4.3 中经过测试
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.lines import Line2D

x = np.linspace(0,10,100)
y = np.sin(x)*(1+x)

fig, ax = plt.subplots()
ax.plot(x,y,label='a')

# new clear axis overlay with 0-1 limits
ax2 = plt.axes([0,0,1,1], facecolor=(1,1,1,0))

x,y = np.array([[0.05, 0.1, 0.9], [0.05, 0.5, 0.9]])
line = Line2D(x, y, lw=5., color='r', alpha=0.4)
ax2.add_line(line)

plt.show()

enter image description here

如果想要与刻度对齐,为什么不使用绘图坐标呢?


那样会更好,但是我无法在坐标轴之外进行绘制。我想要绘制刻度标签所在的位置。(也就是绘图区域之外)(我尝试过在你上面的例子中基本上使用 ax.add_line(line),但坐标大致接近刻度标记的位置...) - Max
21
在这种情况下,只需设置line.set_clip_on(False)。你需要另一个示例吗? - Paul
谢谢。set_clip_on(False)是一个很好的提示。我通过计算图形坐标中的行位置来解决了我的问题,但现在我知道了这个方法以备将来之需。不需要再写另一个答案 - 再次感谢。 - Max
1
@Paul的评论本身就可以作为一个答案。 - Dave Land
3
你可以使用 fig.add_artist(line) 替代 ax2.add_line(line),这样你就可以处理整个图而不仅是一个子图。 - raquelhortab

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接