sns jointplot histograma example data con python seaborn

jointplot - plot histogram python



python: distplot con distribuciones mĂșltiples (2)

Lo importante es ordenar la trama de datos por valores donde el target es 0 , 1 o 2 .

import numpy as np import pandas as pd from sklearn.datasets import load_iris import seaborn as sns iris = load_iris() iris = pd.DataFrame(data=np.c_[iris[''data''], iris[''target'']], columns=iris[''feature_names''] + [''target'']) # Sort the dataframe by target target_0 = iris.loc[iris[''target''] == 0] target_1 = iris.loc[iris[''target''] == 1] target_2 = iris.loc[iris[''target''] == 2] sns.distplot(target_0[[''sepal length (cm)'']], hist=False, rug=True) sns.distplot(target_1[[''sepal length (cm)'']], hist=False, rug=True) sns.distplot(target_2[[''sepal length (cm)'']], hist=False, rug=True) sns.plt.show()

La salida se ve como:

Si no sabe cuántos valores puede tener el target , busque los valores únicos en la columna de target , luego divida la trama de datos y añádala a la gráfica de manera apropiada.

import numpy as np import pandas as pd from sklearn.datasets import load_iris import seaborn as sns iris = load_iris() iris = pd.DataFrame(data=np.c_[iris[''data''], iris[''target'']], columns=iris[''feature_names''] + [''target'']) unique_vals = iris[''target''].unique() # [0, 1, 2] # Sort the dataframe by target # Use a list comprehension to create list of sliced dataframes targets = [iris.loc[iris[''target''] == val] for val in unique_vals] # Iterate through list and plot the sliced dataframe for target in targets: sns.distplot(target[[''sepal length (cm)'']], hist=False, rug=True) sns.plt.show()

Estoy utilizando el transporte marítimo para trazar una parcela de distribución. Me gustaría trazar múltiples distribuciones en la misma parcela en diferentes colores:

Así es como empiezo el diagrama de distribución:

import numpy as np import pandas as pd from sklearn.datasets import load_iris iris = load_iris() iris = pd.DataFrame(data= np.c_[iris[''data''], iris[''target'']],columns= iris[''feature_names''] + [''target'']) sns.distplot(iris[[''sepal length (cm)'']], hist=False, rug=True);

La columna ''target'' contiene 3 valores: 0,1,2.

Me gustaría ver un gráfico de distribución para la longitud del sépalo donde target == 0, target == 1, y target == 2 para un total de 3 gráficos.

¿Alguien sabe cómo hago eso?

Gracias.


Un enfoque más común para este tipo de problemas es refundir sus datos en un formato largo usando Melt, y luego dejar que el mapa haga el resto.

import numpy as np import pandas as pd from sklearn.datasets import load_iris import seaborn as sns iris = load_iris() iris = pd.DataFrame(data=np.c_[iris[''data''], iris[''target'']], columns=iris[''feature_names''] + [''target'']) # recast into long format df = iris.melt([''target''], var_name=''cols'', value_name=''vals'') df.head() target cols vals 0 0.0 sepal length (cm) 5.1 1 0.0 sepal length (cm) 4.9 2 0.0 sepal length (cm) 4.7 3 0.0 sepal length (cm) 4.6 4 0.0 sepal length (cm) 5.0

Ahora puedes trazar simplemente creando un FacetGrid y usando el mapa:

g = sns.FacetGrid(df, col=''cols'', hue="target", palette="Set1") g = (g.map(sns.distplot, "vals", hist=False, rug=True))