0
votes

Pandas GroupBy Scatter Terrain dans une seule intrigue

Ceci est une question de suivi de ce Solution . Il y a une affectation automatique de différentes couleurs lorsque type = ligne mais pour la parcelle de dispersion qui n'est pas le cas. xxx

 Entrez la description de l'image ici

Il existe un problème connecté ici . Y a-t-il une solution de contournement simple pour cela?

Mise à jour:

Lorsque j'essaie la solution recommandée par @importanceObEingNest pour un étiquette Colonne avec des chaînes, sa ne fonctionne pas! xxx

Ça jette une erreur suivante,

ValueRorror: argument RGBA invalide: 'Oui'

Lors de la manipulation de l'exception ci-dessus, une autre exception s'est produite:


6 commentaires

Êtes-vous limité à Matplotlib? Sinon, essayez de regarder marborais Il s'agit d'une enveloppe autour de MPL et réduit le code de la chaudron (et les données de données sont des citoyens de première classe)


Qu'en est-il de AX.SCATRATTER (x = "XCOORD", y = "ycoord", c = 'projid', data = df) ?


Semble fonctionner, merci! Mais pourquoi pd.groupby.plot () ne fonctionne pas pour cela? Y a-t-il une solution pour ça?


@ImportuceObeingernest, si la colonne "Étiquette" est la chaîne, la solution recommandée ne fonctionne pas


@Marvintaschenberger, si la solution utilise matplotlib , alors c'est génial mais je voudrais certainement connaître d'autres solutions également.


Oui, Matplotlib ne comprend pas les couleurs "catégoriques". Il existe d'autres options bien sûr, comme Créer une nouvelle colonne avec des cordes mappées sur des chiffres ou une boucle sur DF.Groupby et créez des dispersions individuelles


3 Réponses :



0
votes

Incase Nous avons déjà une donnée groupée, puis je trouve que la solution suivante pourrait être utile. xxx

 Entrez la description de l'image ici


0 commentaires

1
votes

Vous pouvez boucler sur groupby code> et créer une dispersion par groupe. C'est efficace pour moins de 10 catégories.

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

# random df
df = pd.DataFrame(np.random.randint(0,10,size=(5, 2)), columns=['x','y'])
df['label'] = ['yes','no','yes','yes','no']

# plot groupby results on the same canvas 
fig, ax = plt.subplots(figsize=(8,6))

u, df["label_num"] = np.unique(df["label"], return_inverse=True)

sc = ax.scatter(x = "x", y = "y", c = "label_num", data=df)
ax.legend(sc.legend_elements()[0], u, title="Label")

plt.show()


3 commentaires

Lorsque j'ai essayé votre deuxième solution, il donne `AttributeError: 'PathCollection' Object n'a aucun attribut 'Legend_elements'` cette erreur, pouvez-vous vérifier?


Oui, Legend_elements est une fonction J'ai introduit uniquement récemment. Vous avez besoin de matplotlib 3.1 pour cela.


Ohh. Génial !!! Je vais mettre à jour le mien. Merci beaucoup pour vos contributions aux outils open source :)