matplotlib中的垂直和水平线


122

我不太明白为什么我无法在指定的限制下创建水平和垂直线。我想通过此框绑定数据。但是,双方似乎都不符合我的指示。为什么是这样?

# 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()

在此处输入图片说明

Answers:


166

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

而是使用plt.plot((x1, x2), (y1, y2), 'k-')颜色k从点(x1,y1)到点(x2,y2)画一条线。请参阅pyplot.plot


3
matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.axhline <-文档。您应该编辑答案以包括此链接
tacaswell 2013年

15
绘制水平线和垂直线的另一种解决方案是分别使用hlinesor vlines,因为这比常规plotimo 更为琐碎
sodd

20

对于Matplotlib的新用户来说,这可能是一个常见的问题,他们绘制垂直和水平线。为了理解此问题,您应该注意Matplotlib中存在不同的坐标系

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

另一方面,方法hlinesvlines用于在数据坐标处绘制线。的范围xminxmax是在的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()

它将产生以下图: 在此处输入图片说明

和的值xmin与和方法xmax相同。但是生产线的长度是不同的。axhlinehlines


16

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

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

Rectangle doc

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.