2 votes

Avoir des couleurs dégradées dans sns.pairplot pour une colonne du cadre de données afin de pouvoir voir quels points de données sont connectés les uns aux autres.

Je suis tout à fait capable de produire un diagramme de paires de cornes de mer avec :

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

f, axes = plt.subplots(1, 1)

np.random.seed(1)
a = np.arange(0, 10, 0.1)

np.random.rand()

def myFunc(x):
    myReturn = x + 1*np.random.random(x.shape[0])
    return myReturn

b = myFunc(a)
c = a * np.sin(a)

df = pd.DataFrame({'a': a, 'b': b, 'c': c})

sns.pairplot(df, corner=True)
plt.show()

J'aimerais voir plus facilement l'interdépendance de mes données.

Pour cela, je veux avoir un gradient de couleur progressif pour une colonne de mon DataFrame (de sorte que les valeurs numériques faibles de cette colonne soient par exemple jaunes et les valeurs élevées soient bleues).

Ces couleurs doivent être affichées pour tous les sous-points non diagonaux de mon graphique, en fonction des points de données de a voir le croquis ci-dessous.

L'avantage de cette méthode est limité pour les graphiques [a, b] et [a, c], mais pour le graphique [b, c], je m'attendrais à plus d'informations si les données deviennent plus complexes.

Quelle serait la syntaxe de cette opération ?

enter image description here

3voto

JohanC Points 38863

Vous pourriez faire une boucle à travers les axes hors-diagonale. Et ensuite changer la carte des couleurs et les valeurs des couleurs pour les nuages de points :

import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap
import seaborn as sns
import pandas as pd
import numpy as np

def myFunc(x):
    myReturn = x + 1 * np.random.random(x.shape[0])
    return myReturn

np.random.seed(1)
a = np.arange(0, 10, 0.1)
np.random.rand()

b = myFunc(a)
c = a * np.sin(a)
df = pd.DataFrame({'a': a, 'b': b, 'c': c})

cmap = LinearSegmentedColormap.from_list('blue-yellow', ['gold', 'lightblue', 'darkblue'])  # plt.get_cmap('viridis_r')
g = sns.pairplot(df, corner=True)
for ax in g.axes.flat:
    if ax is not None and not ax in g.diag_axes:
        for collection in ax.collections:
            collection.set_cmap(cmap)
            collection.set_array(df['a'])
plt.show()

changing the scatterplots of a sns.pairplot

2voto

mwaskom Points 2974

Je pense que la chose la plus simple à faire ici est de passer l'index du dataframe comme une variable de teinte. Puisque vous ne voulez pas (naïvement) appliquer à l'histogramme, passez-le directement aux graphiques hors diagonale :

sns.pairplot(
    df,
    corner=True,
    diag_kws=dict(color=".6"),
    plot_kws=dict(
        hue=df.index,
        palette="blend:gold,dodgerblue",
    ),
)

enter image description here

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X