Python 在matplotlib.pyplot fill函数之后,如何识别颜色的特定坐标(x,y)?

Python 在matplotlib.pyplot fill函数之后,如何识别颜色的特定坐标(x,y)?,python,matplotlib,fill,Python,Matplotlib,Fill,有没有办法将特定坐标(x,y)输入pyplot并输出其填充颜色 例如,(0,0)->红色,(0.75,0)->蓝色,(1,1)->白色 这里有一种可能的方法。让我们从修改后的代码(基于您的代码)开始: 它会生成与代码相同的绘图,但也会显示两个有用的对象,blue\u pgn和red\u pgn 这是第二部分: # Create geometries from objects in the plot blue_geom = Polygon(blue_pgn[0].get_xy()) red_geo

有没有办法将特定坐标(x,y)输入pyplot并输出其填充颜色

例如,(0,0)->红色,(0.75,0)->蓝色,(1,1)->白色


这里有一种可能的方法。让我们从修改后的代码(基于您的代码)开始:

它会生成与代码相同的绘图,但也会显示两个有用的对象,
blue\u pgn
red\u pgn

这是第二部分:

# Create geometries from objects in the plot
blue_geom = Polygon(blue_pgn[0].get_xy())
red_geom =  Polygon(red_pgn[0].get_xy())

# create a function
def from_xy_to_color(x,y):
    point_xy = Point(x,y)
    if red_geom.contains(point_xy):
        print("xy:",x,y,", color:","Red")
    elif blue_geom.contains(point_xy):
        print("xy:",x,y,", color:","Blue")
    else:
        print("xy:",x,y,", color:","White")

# test all the points
xys = [[0,0], [.75,0], [1,1]]
for xy in xys:
    #print(xy)
    from_xy_to_color(*xy)
此部件的输出:

xy: 0 0 , color: Red
xy: 0.75 0 , color: Blue
xy: 1 1 , color: White

来自matplotlib.backends.backend_agg导入图canvasagg
将numpy作为np导入
将matplotlib.pyplot作为plt导入
def circle_coords():
t=np.linspace(0,2300)*np.pi
x=np.cos(t)
y=np.sin(t)
返回x,y
def绘图(图):
ax=图gca()
x、 y=圆坐标()
最大填充量(x,y,'b')
最大填充量(x/2,y/2,'r')
def capture():
plt.图((4,4),dpi=20)
图=plt.gcf()
画布=图Canvasagg(图)
绘图(图)
canvas.draw()
r=画布到画布(画布)
plt.close()
返回r
定义画布到画布(画布):
s、 (宽度、高度)=画布。打印到缓冲区()
x=np.frombuffer(s,np.uint8)
返回x.重塑((高度、宽度、4))
def随机_点(形状,n_点=4):
高度、宽度=形状
x=np.随机.均匀(0,宽度,大小=n_点)
y=np.随机.均匀(0,高度,大小=n_点)
返回np.vstack([x,y]).T
def main():
arr=capture()
p=[[360274],
[379, 48],
[117, 216]]
图=plt.gcf()
ax=图gca()
np.设置打印选项(精度=2)
印刷品(p)
对于p中的x,y:
r、 g,b,a=arr[y,x]/255
c=f“{r,g,b}”
打印(arr[y,x])
ax.文本(x,y,c)
最大散射(x,y,c=“黄色”)
plt.imshow(arr)
plt.show()
plt.close()
main()

请参阅:

您为什么要这样做?您的实际绘图是
plt.imshow
还是
plt.plot
?您好,我需要的更像是我将其保存为图片(不是字面上的保存文件),并查找其颜色(不是通过像素位置而是其原始坐标)。请澄清:1。如何“保存为图片”?2.什么是“不直接保存文件”?3.“原始坐标”是什么?4.您想要的预期输入和输出是什么?1和2。就像您的答案一样,所有操作都由画布完成,而不是将文件保存到特定路径(例如:d:/123.png)3&4。我想输入它的原始x,y,而不是像素位置(0,0)->红色,(0.75,0)->蓝色,(1,1)->白色,输出的是它的颜色,我需要的更像是我将它保存为图片(不是字面上的保存文件),并查找它的颜色(不是通过像素位置,而是它的原始坐标)。你的建议是一个很好的例子。但是我发现如果颜色区域将来变得更复杂,那么定义每个多边形将非常困难。你知道其他的方法吗?@allenwei Polygon对象有很多有用的函数/方法来操作自己(试着运行
print(dir(blue_geom))
)。可以检查几何图形是否有效。如果多边形过于粗糙,可以简化其几何体以消除其某些顶点,并使用结果代替。您可以将几何图形转换为
wkt
格式,并将其保存在文件中以备将来使用。如果你想了解这些东西的更多细节,请作为新问题提问,因为这在本问题的范围内是离题的。@allenwei供参考。对于一个新用户,在你获得一些声誉积分之前,你不能投票支持我的答案。但您可以将其标记为“已接受”,并获得“+2”的声誉。这个答案几乎在那里,而输入x,y不是由原始坐标确定的,例如:中心点(x,y)=(0,0)而不是(320250)
# Create geometries from objects in the plot
blue_geom = Polygon(blue_pgn[0].get_xy())
red_geom =  Polygon(red_pgn[0].get_xy())

# create a function
def from_xy_to_color(x,y):
    point_xy = Point(x,y)
    if red_geom.contains(point_xy):
        print("xy:",x,y,", color:","Red")
    elif blue_geom.contains(point_xy):
        print("xy:",x,y,", color:","Blue")
    else:
        print("xy:",x,y,", color:","White")

# test all the points
xys = [[0,0], [.75,0], [1,1]]
for xy in xys:
    #print(xy)
    from_xy_to_color(*xy)
xy: 0 0 , color: Red
xy: 0.75 0 , color: Blue
xy: 1 1 , color: White