Comment créer un nuage de points avec des données catégorielles dans Pandas en utilisant matplotlib ?

Susan Sarandon
Libérer: 2024-11-18 08:55:03
original
841 Les gens l'ont consulté

How to create a scatter plot with categorical data in Pandas using matplotlib?

Création de nuages ​​de points classés par une clé dans les DataFrames Pandas

Dans la visualisation de données, les nuages ​​de points sont couramment utilisés pour discerner les relations entre les variables numériques. Cependant, lorsqu'il existe des variables catégorielles supplémentaires qui contribuent à l'analyse, il devient nécessaire de les représenter dans le nuage de points. Cette question explore un moyen efficace de tracer deux variables tout en traduisant la troisième sous forme de catégories discrètes.

Au départ, des tentatives ont été faites en utilisant df.groupby, mais elles n'ont pas donné les résultats souhaités. L'exemple de DataFrame fourni sert à illustrer le problème :

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

df = pd.DataFrame(np.random.normal(10, 1, 30).reshape(10, 3),
                  index=pd.date_range('2010-01-01', freq='M', periods=10),
                  columns=('one', 'two', 'three'))
df['key1'] = (4, 4, 4, 6, 6, 6, 8, 8, 8, 8)

fig1 = plt.figure(1)
ax1 = fig1.add_subplot(111)
ax1.scatter(df['one'], df['two'], marker='o', c=df['key1'], alpha=0.8)
plt.show()
Copier après la connexion

Cette approche réussit à colorer les marqueurs en fonction de la colonne 'key1', mais il lui manque une légende pour distinguer les catégories. Pour réaliser les deux, une méthode différente est nécessaire.

La solution est d'utiliser le tracé au lieu du nuage de points, car le tracé est mieux adapté aux catégories discrètes :

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

np.random.seed(1974)

# Generate Data
num = 20
x, y = np.random.random((2, num))
labels = np.random.choice(['a', 'b', 'c'], num)
df = pd.DataFrame(dict(x=x, y=y, label=labels))

groups = df.groupby('label')

# Plot
fig, ax = plt.subplots()
ax.margins(0.05)  # Optional, just adds 5% padding to the autoscaling
for name, group in groups:
    ax.plot(group.x, group.y, marker='o', linestyle='', ms=12, label=name)
ax.legend()

plt.show()
Copier après la connexion

Ce code génère un nuage de points chaque catégorie étant représentée par un marqueur distinctif et une légende qui identifie clairement les catégories.

Pour un look plus personnalisé, vous pouvez incorporer le style Pandas en mettant à jour rcParams et en utilisant son générateur de couleurs :

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

np.random.seed(1974)

# Generate Data
num = 20
x, y = np.random.random((2, num))
labels = np.random.choice(['a', 'b', 'c'], num)
df = pd.DataFrame(dict(x=x, y=y, label=labels))

groups = df.groupby('label')

# Plot
plt.rcParams.update(pd.tools.plotting.mpl_stylesheet)
colors = pd.tools.plotting._get_standard_colors(len(groups), color_type='random')

fig, ax = plt.subplots()
ax.set_color_cycle(colors)
ax.margins(0.05)
for name, group in groups:
    ax.plot(group.x, group.y, marker='o', linestyle='', ms=12, label=name)
ax.legend(numpoints=1, loc='upper left')

plt.show()
Copier après la connexion

Cette modification donnera à l'intrigue le style classique des Pandas avec une palette de couleurs plus attrayante visuellement.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal