【问题标题】:Matplotlib clip or trim lines and polygonMatplotlib 剪辑或修剪线和多边形
【发布时间】:2021-11-20 01:25:47
【问题描述】:

如何有效地“修剪”或“剪辑”或删除紫色框外的红线部分? numpy 掩码有什么技巧吗?

使用 Python 3.8.3 和 Matplotlib

x = [10,15.5,12.5,7.5,5,10]
y = [15,10,5,5,10,15]

fig, ax = plt.subplots()
ax.fill_between(x,y, facecolor="blue", alpha=0.25)
ax.axis("equal")

myinterval = 1.5
xvals = np.arange(min(x), max(x)+1, myinterval)
for i in xvals:
    ax.plot([i,i], [0,20], color='red')

【问题讨论】:

    标签: numpy matplotlib crop mask


    【解决方案1】:

    这不是使用 numpy 掩码完成的。如果我理解正确,这是代码:

    fig, ax = plt.subplots()
    x = [10,15.5,12.5,7.5,5,10]
    y = [15,10,5,5,10,15]
    
    ax.fill_between(x,y, facecolor="blue", alpha=0.25)
    ax.axis("equal")
    
    myinterval = 1.5
    xvals = np.arange(min(x), max(x)+1, myinterval)
    
    
    def generate_equation(x, y):
        # y = mx + b
        # b = y - mx
        
        left = []
        right = []
        M = []
        B = []
    
        for i in range(len(x)-1):
            m = ((y[i+1] - y[i]) / (x[i+1] - x[i]))
            b = y[i+1] - m*x[i+1]
            M.append(m)
            B.append(b)
            left.append(min(x[i], x[i+1]))
            right.append(max(x[i], x[i+1]))
    
        return M, B, left, right
            
    M, B, left, right = generate_equation(np.array(x), np.array(y))
    
    for i in range(len(xvals)):
        ylim = []
        for j in range(len(M)):
            if xvals[i] >= left[j] and xvals[i] <= right[j]:
                Y = M[j] * xvals[i] + B[j]
                ylim.append(Y)
        ax.vlines(xvals[i], min(ylim), max(ylim), 'r')
    

    输出:

    【讨论】:

      猜你喜欢
      • 2014-07-28
      • 1970-01-01
      • 2020-09-22
      • 1970-01-01
      • 1970-01-01
      • 2018-03-07
      • 1970-01-01
      • 2021-03-10
      • 2019-10-05
      相关资源
      最近更新 更多