Maison >développement back-end >Tutoriel Python >Comment créer un nuage de points avec des données catégorielles dans Pandas en utilisant 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()
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()
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()
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!