Polygon et contains
Résolu
B_Lolita
Messages postés
4
Statut
Membre
-
B_Lolita Messages postés 4 Statut Membre -
B_Lolita Messages postés 4 Statut Membre -
Bonjour,
Je cherche à créer un programme qui associe une couleur à un point en fonction de sa place dans un triangle.
Les points qui ne sont pas dans le triangle sont mis en noir.
Pour cela je crée un Polygon et j'utilise la fonction .contains pour savoir si le point se trouve ou non dedans.
Mon problème est que quand j'utilise le scatter je met l'axe des x en échelle logarithmique et là je me retrouve avec plein de point en noir dans mon triangle.
Si j'enlève l'échelle logarithmique j'ai bien les points noirs à l'extérieur.
Savez-vous s'il existe une méthode ou une variable permettant de préciser dans le ".contains" que l'axe des x sera logarithmique?
Merci bonne journée
Ici c'est le triangle sans l'échelle logarithmique.

Et ensuite avec l'échelle logarithmique, l'idéal serait que les points noirs soient en couleur en fonction de leur position dans le triangle

Je cherche à créer un programme qui associe une couleur à un point en fonction de sa place dans un triangle.
Les points qui ne sont pas dans le triangle sont mis en noir.
Pour cela je crée un Polygon et j'utilise la fonction .contains pour savoir si le point se trouve ou non dedans.
Mon problème est que quand j'utilise le scatter je met l'axe des x en échelle logarithmique et là je me retrouve avec plein de point en noir dans mon triangle.
Si j'enlève l'échelle logarithmique j'ai bien les points noirs à l'extérieur.
Savez-vous s'il existe une méthode ou une variable permettant de préciser dans le ".contains" que l'axe des x sera logarithmique?
Merci bonne journée
#Création du triangle triangle = Polygon([[mic,mib],[mac,mab],[mac,mib]]) x,y = triangle.exterior.xy ##Look if the point are in the triangle points = [] for i in range(len(df)): p1=Point(df['chl'].iloc[i],df['nppv'].iloc[i]) points.append(triangle.contains(p1)) df['in_out'] =points cond1=(df['in_out']==True) cond2=(df['in_out']==False) sample_in= pd.DataFrame(df[cond1]) sample_out= pd.DataFrame(df[cond2]) #Resolve the system a = np.array ([[mic,mac,mac],[mib,mab,mib],[1,1,1]]) qr = [] #red coefficient qg = [] #green coefficient qb = [] #blue coefficient for i in range(len(sample_in)): b = np.array([sample_in['chl'].iloc[i],sample_in['nppv'].iloc[i],1]) #This doen't work if it's a singular matrix x1 = np.linalg.solve(a,b) #So the result can be approch by this #x1 = np.linalg.lstsq(a,b) qr.append(x1[0]) qg.append(x1[1]) qb.append(x1[2]) sample_in['qr'] = qr sample_in['qg'] = qg sample_in['qb'] = qb list_resu = [] for i in range(len(sample_in)): if is_between(0, qr[i], 1) & is_between(0, qg[i], 1) & is_between(0, qb[i], 1) : list_resu.append([qr[i],qg[i],qb[i]]) else : list_resu.append('black') sample_in['Color']=list_resu sample_out['Color'] = 'black' all_data = pd.concat([sample_in,sample_out]) ax.plot(x,y) ax.scatter(all_data['chl'],all_data['nppv'], c = all_data['Color']) plt.title("Diagram chlorophyll/biomass %s ,depth = %i " %(time,d), fontsize = 40)
Ici c'est le triangle sans l'échelle logarithmique.

Et ensuite avec l'échelle logarithmique, l'idéal serait que les points noirs soient en couleur en fonction de leur position dans le triangle

Configuration: Linux / Firefox 90.0
A voir également:
- Polygon et contains
- Local-part of envelope rcpt address contains utf8 but remote server did not offer smtputf8 - Forum Javascript
- Ecriture avec des caractères incongrus avec thunderbird - Forum Mail
- Encodage d'un fichier en UTF-8 (sans bom) - Forum Programmation
- Container QUAR - Forum Windows 10
- ANSI et UTF8 sans BOM - Forum Webmastering
Oui désolé je n'ai pas partagé tout le programme car je ne savais pas si ce serait utile sachant qu'il est assez long et que les données que j'utilise font plusieurs gigas.
J'ai écrit un programme simplifié pour mieux cerner le problème.
Je pense aussi qu'il faut utiliser le logarithme au niveau des lignes 24 et 25 mais je n'ai trouvé aucune information là dessus.
Merci beaucoup
il suffit de calculer ainsi pour mettre le point au bon endroit par rapport au triangle:
Je n'avais pas du tout pensé à aborder les choses sous cet angle là mais c'est exactement ce que je cherchais, merci beaucoup!