Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
4.4k views
in Technique[技术] by (71.8m points)

python - Get table output based on scatter point

I'm trying to create a table output that changes depending on where a scatter point lies in a graph.

I have done something similar in the past with rectangles but am struggling with the polygons as they can have multiple x and y ranges.

I want the output to give the Location ID (z) and soil type (ME, MI etc....) in a table that will change if I bring in a different CSV file. I have a bit of psuedo code at the bottom to show the direction I was going in but I'm probably wrong.

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from matplotlib.patches import Polygon
import math

#Bring in the CSV file
LLPL=pd.read_csv("CSV_File",delimiter=',')


#Isolate columns needed from CSV file and plot graph
y=LLPL.Plasticity_Index
z=LLPL.Location_ID
img = plt.imread("LLPL_Picture.png")
fig, ax=plt.subplots()
ax.imshow(img, extent=[0, 100, 0, 80])
plt.plot(x, y,'.')


#Define polygon coordinates
ME=[[91.5,0],[100,0],[100,58.5],[91.5,52]]
CE=[[91.5,52],[100,58.5],[100,80],[93,80],[91.5,78]]
MV=[[71,0],[91.5,0],[91.5,52.5],[71,37.5]]
MH=[[50.5,0],[71,0],[71,37.5],[50.5,22]]
CV=[[71,37.5],[91.5,52],[91.5,78],[71,58.5]]
CH=[[50.5,22],[71,37.5],[71,58.5],[50.5,40]]
MI=[[35,0],[50.5,0],[50.5,22],[35,11]]
CI=[[35,11],[50.5,22],[50.5,40],[35,24]]
ML=[[9,0],[35,0],[35,11],[28,6],[15,6],[8,0]]
CL=[[15,6],[28,6],[35,11],[35,25],[15,6]]


#Add polygons to the graph
poly1=ax.add_patch(Polygon(ME,closed=True,facecolor='blue',alpha=0.5))
poly2=ax.add_patch(Polygon(CE,closed=True,facecolor='green',alpha=0.5))
poly3=ax.add_patch(Polygon(MV,closed=True,facecolor='red',alpha=0.5))
poly4=ax.add_patch(Polygon(MH,closed=True,facecolor='orange',alpha=0.5))
poly5=ax.add_patch(Polygon(CV,closed=True,facecolor='yellow',alpha=0.5))
poly6=ax.add_patch(Polygon(CH,closed=True,facecolor='pink',alpha=0.5))
poly7=ax.add_patch(Polygon(MI,closed=True,facecolor='purple',alpha=0.5))
poly8=ax.add_patch(Polygon(CI,closed=True,facecolor='grey',alpha=0.5))
poly9=ax.add_patch(Polygon(ML,closed=True,facecolor='lightblue',alpha=0.7))
poly10=ax.add_patch(Polygon(CL,closed=True,facecolor='black',alpha=0.5))
plt.show()

#def soilclassification():
    
   # if x = Nan
        #return 'Non Plastic'
   # elif (x,y) lies in polygon
        #return 'ME'
    #elif (x,y) lies in polygon
        #return 'MI'
        
        #etc.....

This currently returns this:

Graph showing scatter points within polygons

Thanks


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
等待大神答复

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

1.4m articles

1.4m replys

5 comments

57.0k users

...