【问题标题】:vertical & horizontal lines in matplotlibmatplotlib 中的垂直和水平线
【发布时间】:2013-05-31 14:04:41
【问题描述】:

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

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

【问题讨论】:

    标签: matplotlib


    【解决方案1】:

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

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

    【讨论】:

    【解决方案2】:

    这可能是 Matplotlib 新用户绘制垂直和水平线的常见问题。为了理解这个问题,你应该知道different coordinate systems exist in 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()
    

    它将产生以下情节:

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

    【讨论】:

      【解决方案3】:

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

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

      Rectangle doc

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-19
        • 2017-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-23
        • 1970-01-01
        相关资源
        最近更新 更多