2017-07-08 2 views
0

J'essaye de créer un nuage de points en Python. J'ai dataframe « df » avec une catégorie spécifiée et x et y sont des nombres colonne:Tracer avec des pandas et matplotlib

groups = df.groupby(category) 
fig, ax = plt.subplots() 
for name, group in groups: 
    ax.plot(x=group.iloc[:,x], y=group.iloc[:,y], marker='o', linestyle='',label=name) 
fig = ax.get_figure() 
fig.savefig(path) 

Pour une raison quelconque, je reçois un nuage de points vide - Est-ce que je fais quelque chose de mal?

Répondre

1

ax.plot n'a pas les arguments x et y.

La signature est Axes.plot(*args, **kwargs), ce qui signifie que x et y sont simplement des arguments positionnels. Si vous spécifiez x= et y=, ils seront traités comme des arguments de mot-clé et ignorés.

donc enlever x= et y= du code,

ax.plot(group.iloc[:,x], group.iloc[:,y], marker='o', linestyle='',label=name) 

Exemple complet:

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

df = pd.DataFrame({"x":np.random.rand(40), 
        "y":np.random.rand(40), 
        "category": np.random.choice(list("ABCD"), size=40)}) 
category = "category" 
x=1; y=2 
groups = df.groupby(category) 
fig, ax = plt.subplots() 
for name, group in groups: 
    ax.plot(group.iloc[:,x], group.iloc[:,y], marker='o', linestyle='',label=name) 
fig = ax.get_figure() 
#fig.savefig(path) 
plt.show() 
+0

Merci pour votre aide :) – Ivan