Python 给三角形的区域着色

Python 给三角形的区域着色,python,matplotlib,plot,scatter-plot,Python,Matplotlib,Plot,Scatter Plot,这是我的代码: import numpy as np import pandas as pd import matplotlib.pyplot as plt x = np.random.randint(1,100,100) y = np.random.randint(-500,200,100) plt.scatter(x, y) ax = plt.gca() ax.invert_yaxis() x1, y1 = [0, 100], [-200, 0] x2, y2 = [0, 0], [0

这是我的代码:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

x = np.random.randint(1,100,100)
y = np.random.randint(-500,200,100)
plt.scatter(x, y)
ax = plt.gca()
ax.invert_yaxis()


x1, y1 = [0, 100], [-200, 0]
x2, y2 = [0, 0], [0, -200]
x3, y3 = [0, 100], [0, 0]

plt.plot(x1,y1,x2,y2,x3,y3, marker = 'o')
plt.show()

plt.show()
有两个问题

  • 我希望三角形的臂的颜色是一样的,我该怎么做
  • 我想给三角形下面的区域着色,使其半透明,即我可以看到三角形内部散点图的点。这可行吗

  • 您可以通过列出3个xy坐标来表示三角形。重复第一个点将创建闭合多边形。转换为numpy后,只需选择x坐标和y坐标就更容易了,就像在
    三角形[:,0]
    中选择x坐标一样

    fill
    创建填充多边形,其中
    alpha
    带来半透明度

    导入matplotlib.pyplot作为plt
    将numpy作为np导入
    x=np.random.randint(110000)
    y=np.random.randint(-500200100)
    ax=plt.gca()
    最大散射(x,y)
    ax.invert_yaxis()
    点数=[[0,-200],[100,0],[0,0]]
    三角形=np.数组(点+点[:1])
    ax.plot(三角形[:,0],三角形[:,1],marker='o')
    最大填充(三角形[:,0],三角形[:,1],颜色=黄色,alpha=0.3)
    为席,易在点:
    text(xi,yi,f'x:{xi:.0f}\n y:{yi:.0f}',color='red',fontsize=12,weight='bold',
    va='top'如果yi>-100,则为'bottom')
    ax.set_xlim(xmax=120)#更多的文本空间
    plt.show()
    


    PS:这个答案使用
    fill
    ,因为它适用于一般三角形(以及更复杂的多边形)<代码>填充(x1,y1)填充线段
    x1,y1
    y=0
    之间的区域。在问题的示例中,
    y3
    无处不在
    0
    fill_-between(x1,y1)
    将为示例三角形着色。如果
    y3
    有不同的值,但
    x3
    x1
    仍然相等,
    fill_在(x1,y1,y3)
    之间起作用。对于更任意的三角形,
    之间填充将更麻烦。

    您可以通过列出3个xy坐标来表示三角形。重复第一个点将创建闭合多边形。转换为numpy后,只需选择x坐标和y坐标就更容易了,就像在
    三角形[:,0]
    中选择x坐标一样

    fill
    创建填充多边形,其中
    alpha
    带来半透明度

    导入matplotlib.pyplot作为plt
    将numpy作为np导入
    x=np.random.randint(110000)
    y=np.random.randint(-500200100)
    ax=plt.gca()
    最大散射(x,y)
    ax.invert_yaxis()
    点数=[[0,-200],[100,0],[0,0]]
    三角形=np.数组(点+点[:1])
    ax.plot(三角形[:,0],三角形[:,1],marker='o')
    最大填充(三角形[:,0],三角形[:,1],颜色=黄色,alpha=0.3)
    为席,易在点:
    text(xi,yi,f'x:{xi:.0f}\n y:{yi:.0f}',color='red',fontsize=12,weight='bold',
    va='top'如果yi>-100,则为'bottom')
    ax.set_xlim(xmax=120)#更多的文本空间
    plt.show()
    


    PS:这个答案使用
    fill
    ,因为它适用于一般三角形(以及更复杂的多边形)<代码>填充(x1,y1)填充线段
    x1,y1
    y=0
    之间的区域。在问题的示例中,
    y3
    无处不在
    0
    fill_-between(x1,y1)
    将为示例三角形着色。如果
    y3
    有不同的值,但
    x3
    x1
    仍然相等,
    fill_在(x1,y1,y3)
    之间起作用。对于更任意的三角形,
    fill\u-between
    会更麻烦。

    您只需要在
    plot()中指定
    color
    属性。对于着色,您需要
    fill\u between()
    函数:

    将numpy导入为np
    作为pd进口熊猫
    将matplotlib.pyplot作为plt导入
    x=np.random.randint(1100100)
    y=np.random.randint(-500200100)
    ax=plt.gca()
    最大散射(x,y)
    ax.invert_yaxis()
    x1,y1=[01100],-200,0]
    x2,y2=[0,0],[0,-200]
    x3,y3=[01100],[0,0]
    坐标图(x1,y1,x2,y2,x3,y3,标记='o',颜色='red')
    (x1,y1,facecolor='red',alpha=0.5)之间的最大填充量
    plt.show()
    
    输出:


    您只需在
    plot()
    中指定
    color
    属性即可。对于着色,您需要
    fill\u between()
    函数:

    将numpy导入为np
    作为pd进口熊猫
    将matplotlib.pyplot作为plt导入
    x=np.random.randint(1100100)
    y=np.random.randint(-500200100)
    ax=plt.gca()
    最大散射(x,y)
    ax.invert_yaxis()
    x1,y1=[01100],-200,0]
    x2,y2=[0,0],[0,-200]
    x3,y3=[01100],[0,0]
    坐标图(x1,y1,x2,y2,x3,y3,标记='o',颜色='red')
    (x1,y1,facecolor='red',alpha=0.5)之间的最大填充量
    plt.show()
    
    输出:


    更一般地说,您可以使用matplotlib面片和集合()填充任何多边形:


    更一般地说,您可以使用matplotlib面片和集合()填充任何多边形:


    再次感谢@meowulf再次感谢@meowulf再次感谢@Alejandro!再次感谢@Alejandro!顺便说一句,我有一个问题,如何显示图形上的三角形坐标?i、 (0,-200),(100,0),(0,0)我添加了一些代码来添加带有坐标的文本。顺便问一下,我有一个问题,如何在图形上显示三角形坐标?i、 (0,-200),(100,0),(0,0)我添加了一些代码来添加带有坐标的文本。
    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    from matplotlib.patches import Polygon
    from matplotlib.collections import PatchCollection    
    
    x = np.random.randint(1,100,100)
    y = np.random.randint(-500,200,100)
    plt.scatter(x, y)
    ax = plt.gca()
    ax.invert_yaxis()
    
    
    vertices = np.array([[0,0],[0,-200.0],[100.0,0]])
    
    patches = []
    triangle = Polygon(vertices, True)
    patches.append(triangle)
    
    p = PatchCollection(patches, alpha=0.4)
    ax=plt.gca()
    ax.add_collection(p)
    
    plt.show()