130

我不太明白为什么我无法在指定的范围内创建水平线和垂直线。我想用这个框来绑定数据。然而,双方似乎并没有遵守我的指示。为什么是这样?

# CREATING A BOUNDING BOX
# BOTTOM HORIZONTAL
plt.axhline(y=.4, xmin=0.25, xmax=0.402, linewidth=2, color = 'k')
# RIGHT VERTICAL
plt.axvline(x=0.402, ymin=0.4, ymax = 0.615, linewidth=2, color='k')
# LEFT VERTICAL
plt.axvline(x=0.1, ymin=0.58, ymax = 0.79, linewidth=2, color='k')
plt.show()

在此处输入图像描述

4

3 回答 3

172

您正在调用的 pyplot 函数,axhline()axvline()绘制跨越轴范围的一部分的线,无论坐标如何。参数xminymin使用值 0.0 作为轴的最小值,使用值 1.0 作为轴的最大值。

相反,使用plt.plot((x1, x2), (y1, y2), 'k-')颜色 k 从点 (x1, y1) 到点 (x2, y2) 绘制一条线。见pyplot.plot

于 2013-06-05T02:18:37.020 回答
27

这可能是 Matplotlib 新用户绘制垂直和水平线的常见问题。为了理解这个问题,你应该知道Matplotlib 中存在不同的坐标系

方法axhlineaxvline用于在轴坐标处绘制线。在此坐标系中,左下点的坐标为 (0,0),而右上角的坐标为 (1,1),与绘图的数据范围无关。参数xminxmax都在 [0,1] 范围内。

另一方面,方法hlinesvlines用于在数据坐标处绘制线条。xmin和的范围xmax在 x 轴的数据限制范围内。

让我们举一个具体的例子,

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 5, 100)
y = np.sin(x)

fig, ax = plt.subplots()

ax.plot(x, y)
ax.axhline(y=0.5, xmin=0.0, xmax=1.0, color='r')
ax.hlines(y=0.6, xmin=0.0, xmax=1.0, color='b')

plt.show()

它将产生以下情节: 在此处输入图像描述

xminand的值与and方法xmax相同。但生产线的长度不同。axhlinehlines

于 2018-05-21T08:20:27.243 回答
16

如果要添加边界框,请使用矩形:

ax = plt.gca()
r = matplotlib.patches.Rectangle((.5, .5), .25, .1, fill=False)
ax.add_artist(r)

Rectangle文档

于 2013-06-05T04:11:59.863 回答