Comment coder en couleur les nuages ​​de points par valeurs de colonne en Python ?

Barbara Streisand
Libérer: 2024-10-19 14:47:02
original
591 Les gens l'ont consulté

How to Color-Code Scatter Plots by Column Values in Python?

Graphiques à nuages ​​de points à codage couleur par valeurs de colonne en Python

Dans la visualisation de données, l'attribution de couleurs à différentes catégories peut améliorer la clarté et révéler des motifs. Cette fonctionnalité est facilement disponible dans ggplot2 pour R, mais comment pouvons-nous obtenir la même chose en Python en utilisant pandas et matplotlib ?

Mise à jour : améliorations Seaborn

Depuis la réponse originale , Seaborn est devenu une bibliothèque puissante pour créer des intrigues informatives et visuellement attrayantes. Ses mises à jour récentes offrent des fonctions pratiques pour colorer les nuages ​​de points en fonction des valeurs des colonnes :

  • Utilisation de seaborn.relplot : Cette fonction de haut niveau combine des aspects de matplotlib.pyplot.scatter et de Seaborn. FacetteGrille. Il gère automatiquement le codage des couleurs en fonction des paramètres de teinte et d'ordre spécifiés.
  • Mappage de matplotlib.pyplot.scatter à seaborn.FacetGrid : Semblable à l'approche originale, vous pouvez mapper la fonction scatter sur un FacetGrid et personnalisez les couleurs en fonction de la teinte.

Approche originale Pandas et Matplotlib

Pour ceux qui recherchent une approche directe avec Matplotlib, voici une fonction personnalisée qui attribue des couleurs aux points basés sur une colonne catégorielle :

<code class="python">import matplotlib.pyplot as plt
import pandas as pd

def dfScatter(df, xcol='Height', ycol='Weight', catcol='Gender'):
    fig, ax = plt.subplots()
    categories = np.unique(df[catcol])
    colors = np.linspace(0, 1, len(categories))
    colordict = dict(zip(categories, colors))

    df["Color"] = df[catcol].apply(lambda x: colordict[x])
    ax.scatter(df[xcol], df[ycol], c=df["Color"])
    return fig</code>
Copier après la connexion

Cette fonction crée un dictionnaire de couleurs à partir de valeurs de catégorie uniques et attribue les couleurs correspondantes aux points de données. Le nuage de points est ensuite généré avec des points codés par couleur.

Exemple

Utilisation de l'exemple de cadre de données fourni :

<code class="python">df = pd.DataFrame({'Height': np.append(np.random.normal(6, 0.25, size=5), np.random.normal(5.4, 0.25, size=5)),
                   'Weight': np.append(np.random.normal(180, 20, size=5), np.random.normal(140, 20, size=5)),
                   'Gender': ["Male", "Male", "Male", "Male", "Male",
                              "Female", "Female", "Female", "Female", "Female"]})</code>
Copier après la connexion

Appel de la fonction dfScatter avec le dataframe :

<code class="python">fig = dfScatter(df)
fig.savefig('color_coded_scatterplot.png')</code>
Copier après la connexion

Produit un nuage de points où les points sont colorés par sexe :

[Image du nuage de points coloré par sexe]

Les fonctionnalités avancées de Seaborn et le La fonction dfScatter personnalisée offre des options flexibles pour ajouter un codage couleur aux nuages ​​de points en Python, rendant la visualisation des données plus informative et visuellement attrayante.

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
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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!