2016-09-25 2 views
1

J'essaie de créer un nuage de points pour un fichier csv en python qui contient 4 colonnes x, y, TL, L. Je suis censé tracer x par rapport à y et changer la couleur du marqueur basé sur le class ID dans la colonne TL que j'ai réussi dans le code ci-dessous.Comment changer la forme du marqueur en fonction d'une variable de colonne?

import pandas as pd  
from matplotlib import pyplot as plt  
import numpy as np 

df=pd.read_csv('knnDataSet.csv') 
df.columns=['SN','x','y','TL','L'] 

color=['red','green','blue'] 

groups = df.groupby('TL') 

fig, ax = plt.subplots() 

for name, group in groups:  
    ax.plot(group.x, group.y, marker='o', linestyle='', ms=12, label=name) 

ax.legend()  
plt.show() 

, je dois aussi changer la forme selon que le marqueur a une étiquette dans la colonne L ou non, mais je ne sais pas comment mettre à jour mon code pour répondre à cette exigence.

Voici le lien pour le fichier knnDataSet.csv: knnDataSet.csv

+0

Voici le lien pour le fichier: https://www.dropbox.com/s/d9fzjs1pkmhyzqw/knnDataSet.csv?dl=0 –

Répondre

2

Vous voulez probablement quelque chose comme ceci:

import pandas as pd 
from matplotlib import pyplot as plt 
import numpy as np 

df=pd.read_csv('knnDataSet.csv') 
df.columns=['SN','x','y','TL','L'] 
color=['red','green','blue'] 

groups = df.groupby('TL') 

fig, ax = plt.subplots(figsize=(11,8)) 

for name, group in groups: 
    for x in group.values: 
     if np.isnan(x[4]): 
      ax.plot(x[1], x[2], marker='x', linestyle='', ms=12) 
     else: 
      ax.plot(x[1], x[2], marker='o', linestyle='', ms=12)      

#ax.legend() 
plt.show() 

Si une étiquette dans la colonne L est pas défini alors le marqueur sera X
Si une étiquette dans la colonne L IS est définie, le marqueur sera O

Sortie: enter image description here

+0

cela devrait être suffisant. Je vous remercie. –