J'ai un bloc de données pandas et j'aimerais tracer les valeurs d'une colonne par rapport à celles d'une autre colonne. Heureusement, il existe une méthode plot
associée aux trames de données qui semble faire ce dont j'ai besoin:
df.plot(x='col_name_1', y='col_name_2')
Malheureusement, il semble que parmi les styles de tracé (listés ici après le paramètre kind
), il n'y a pas de points. Je peux utiliser des lignes ou des barres ou même de la densité mais pas des points. Existe-t-il un moyen de contourner le problème qui puisse aider à résoudre ce problème?.
Vous pouvez spécifier la style
de la ligne tracée lorsque vous appelez df.plot
:
_df.plot(x='col_name_1', y='col_name_2', style='o')
_
L'argument style
peut également être un dict
ou list
, par exemple:
_import numpy as np
import pandas as pd
d = {'one' : np.random.Rand(10),
'two' : np.random.Rand(10)}
df = pd.DataFrame(d)
df.plot(style=['o','rx'])
_
Tous les formats acceptés sont répertoriés dans la documentation de matplotlib.pyplot.plot
.
Pour cela (et la plupart des complot), je ne me fierais pas aux Pandas wrappers to matplotlib. Au lieu de cela, utilisez directement matplotlib:
import matplotlib.pyplot as plt
plt.scatter(df['col_name_1'], df['col_name_2'])
plt.show() # Depending on whether you use IPython or interactive mode, etc.
et rappelez-vous que vous pouvez accéder à un tableau NumPy des valeurs de la colonne avec df.col_name_1.values
par exemple.
J'ai eu des difficultés à utiliser ceci avec Pandas le traçage par défaut dans le cas d'une colonne de valeurs Timestamp avec une précision à la milliseconde. En essayant de convertir les objets en type datetime64
, j'ai également découvert un problème désagréable: < Pandas donne un résultat incorrect lorsque vous demandez si les valeurs de colonne Timestamp ont un type astuce >.
Pandas
utilise matplotlib
comme bibliothèque pour les tracés de base. La manière la plus simple dans votre cas utilisera les éléments suivants:
import pandas as pd
import numpy as np
#creating sample data
sample_data={'col_name_1':np.random.Rand(20),
'col_name_2': np.random.Rand(20)}
df= pd.DataFrame(sample_data)
df.plot(x='col_name_1', y='col_name_2', style='o')
Cependant, je recommanderais d'utiliser seaborn
comme solution alternative si vous souhaitez disposer de tracés plus personnalisés sans entrer dans le niveau de base de matplotlib.
. Dans ce cas, la solution sera la suivante:
import pandas as pd
import seaborn as sns
import numpy as np
#creating sample data
sample_data={'col_name_1':np.random.Rand(20),
'col_name_2': np.random.Rand(20)}
df= pd.DataFrame(sample_data)
sns.scatterplot(x="col_name_1", y="col_name_2", data=df)