首页 > 解决方案 > 如何在 matplotlib.pyplot 填充函数后识别其颜色的某些坐标(x,y)?

问题描述

有没有办法将某个坐标(x,y)输入到pyplot并输出其填充颜色作为回报?

前任。(0,0) -> 红色 , (0.75,0) -> 蓝色 , (1,1) -> 白色

import numpy as np
import matplotlib.pyplot as plt
plt.figure(figsize=(15,15))
x,y,x2,y2=[],[],[],[]
for i in np.linspace(0,2,300):
    x.append(np.cos(np.pi*i))
    y.append(np.sin(np.pi*i))  
    x2.append(0.5*np.cos(np.pi*i))
    y2.append(0.5*np.sin(np.pi*i))

plt.fill(x,y,'b')
plt.fill(x2,y2,'r')

彩色图像

标签: pythonmatplotlibfill

解决方案


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

# Modified code
import numpy as np
import matplotlib.pyplot as plt
from shapely.geometry import Point, Polygon  # additional code

plt.figure(figsize=(15,15))
x,y,x2,y2=[],[],[],[]
for i in np.linspace(0,2,300):
    x.append(np.cos(np.pi*i))
    y.append(np.sin(np.pi*i))  
    x2.append(0.5*np.cos(np.pi*i))
    y2.append(0.5*np.sin(np.pi*i))

# grab the fill objects for use later
# .fill return: matplotlib.patches.Polygon object
blue_pgn = plt.fill(x,y,'b')  #Plot filled polygons
red_pgn = plt.fill(x2,y2,'r')

plt.show()

它生成与您的代码相同的图,但也公开了 2 个有用的对象,blue_pgn并且red_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

推荐阅读