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