Python 2.7 使用matplotlib更改特定值范围的线样式

Python 2.7 使用matplotlib更改特定值范围的线样式,python-2.7,matplotlib,plot,Python 2.7,Matplotlib,Plot,我需要复制这种类型的图(分叉图)- 我试着按照上给出的例子做,但实际上做不出来。有人能给我一个提示吗?在下面我列出了4个不同的例子。他们展示了不同的东西: 在你的问题中重建图表的最简单方法。请注意,每条线仅由两点定义 这就是我假设的情况:两个x和y向量定义了每条线(在我的示例中,它们都有100个值) 这一个对您来说最有趣(我猜):向量solid1和solid2用于选择满足条件的x和y的值 只是为了向您展示如何将脊椎置于中心(因为您问题中的图表将它们置于中心) 代码: 将numpy导入为np

我需要复制这种类型的图(分叉图)-


我试着按照上给出的例子做,但实际上做不出来。有人能给我一个提示吗?

在下面我列出了4个不同的例子。他们展示了不同的东西:

  • 在你的问题中重建图表的最简单方法。请注意,每条线仅由两点定义
  • 这就是我假设的情况:两个x和y向量定义了每条线(在我的示例中,它们都有100个值)
  • 这一个对您来说最有趣(我猜):向量
    solid1
    solid2
    用于选择满足条件的x和y的值
  • 只是为了向您展示如何将脊椎置于中心(因为您问题中的图表将它们置于中心)
  • 代码:

    将numpy导入为np
    将matplotlib.pyplot作为plt导入
    plt.图(figsize=(12,4))
    #例1
    plt.子地块(1,4,1)
    line1=np.array([-1,0],[0,0]])
    line2=np.array([[0,0],[1,1]])
    line3=np.array([[-1,-1],[0,0]])
    line4=np.array([[0,0],[1,0]])
    plt.绘图(第1行[:,0],第1行[:,1],“b”,线宽=4)
    plt.绘图(第2行[:,0],第2行[:,1],“b”,线宽=4)
    plt.plot(第3行[:,0],第3行[:,1],“b--”,线宽=4)
    plt.plot(第4行[:,0],第4行[:,1],“b--”,线宽=4)
    #例2
    plt.子地块(1,4,2)
    x1=np.linspace(-1,1100)
    x2=np.linspace(-1,1100)
    y1=x1*0
    y2=x2
    plt.绘图(x1,y1,'r',线宽=4)
    plt.绘图(x2,y2,'g',线宽=4)
    #例3
    plt.子地块(1,4,3)
    #某种分裂条件:
    solid1=x10
    #在两个单独的绘图调用中绘制每一行
    plt.绘图(x1[solid1],y1[solid1],'r',线宽=4)
    plt.plot(x1[np.logical\u not(solid1)],y1[np.logical\u not(solid1)],'r--',线宽=4)
    plt.绘图(x2[solid2],y2[solid2],'g',线宽=4)
    plt.plot(x2[np.logical\u not(solid2)],y2[np.logical\u not(solid2)],'g--',线宽=4)
    #例4
    plt.子地块(1,4,4)
    #把刺放在中间
    ax=plt.gca()
    斧头刺[‘左’]。设置_位置(‘中心’)
    斧头刺['right'].设置颜色('none')
    斧头刺['bottom'].设置_位置('center'))
    斧头刺['top'].设置颜色(“无”)
    ax.spines['left'].设置智能边界(True)
    ax.spines['bottom'].设置智能边界(True)
    ax.xaxis.set\u ticks\u位置('底部')
    ax.yaxis.set\u ticks\u位置(“左”)
    plt.show()
    
    你到底能做些什么?诀窍是画4条线(在你的例子中):2条实线和2条虚线。我不明白在我给出的链接中,什么是线
    plt。plot(x[下面]、y1[下面],“b-”)
    does..在你链接的例子中,
    below
    bool
    s的向量,用于仅选择
    x
    y
    below
    真的那些值。
    
    import numpy as np
    import matplotlib.pyplot as plt
    
    plt.figure(figsize=(12,4))
    
    # Example 1
    plt.subplot(1,4,1)
    line1 = np.array([[-1,0],[0,0]])
    line2 = np.array([[0,0],[1,1]])
    line3 = np.array([[-1,-1],[0,0]])
    line4 = np.array([[0,0],[1,0]])
    plt.plot(line1[:,0], line1[:,1], 'b', linewidth=4)
    plt.plot(line2[:,0], line2[:,1], 'b', linewidth=4)
    plt.plot(line3[:,0], line3[:,1], 'b--', linewidth=4)
    plt.plot(line4[:,0], line4[:,1], 'b--', linewidth=4)
    
    # Example 2
    plt.subplot(1,4,2)
    x1 = np.linspace(-1,1,100)
    x2 = np.linspace(-1,1,100)
    y1 = x1*0
    y2 = x2
    plt.plot(x1,y1,'r', linewidth=4)
    plt.plot(x2,y2,'g', linewidth=4)
    
    # Example 3
    plt.subplot(1,4,3)
    #some sort of split condition:
    solid1 = x1<0
    solid2 = x2>0
    #plot each line in two seperate plot calls
    plt.plot(x1[solid1], y1[solid1], 'r', linewidth=4)
    plt.plot(x1[np.logical_not(solid1)], y1[np.logical_not(solid1)], 'r--', linewidth=4)
    plt.plot(x2[solid2], y2[solid2], 'g', linewidth=4)
    plt.plot(x2[np.logical_not(solid2)], y2[np.logical_not(solid2)], 'g--', linewidth=4)
    
    # Example 4 
    plt.subplot(1,4,4)
    # put the spines to the middle
    ax = plt.gca()
    ax.spines['left'].set_position('center')
    ax.spines['right'].set_color('none')
    ax.spines['bottom'].set_position('center')
    ax.spines['top'].set_color('none')
    ax.spines['left'].set_smart_bounds(True)
    ax.spines['bottom'].set_smart_bounds(True)
    ax.xaxis.set_ticks_position('bottom')
    ax.yaxis.set_ticks_position('left')
    
    plt.show()