¿Hay un parámetro en matplotlib / pandas para tener el eje Y de un histogtwig como porcentaje?

Me gustaría comparar dos histogtwigs haciendo que el eje Y muestre el porcentaje de cada columna del tamaño del conjunto de datos en lugar de un valor absoluto. ¿Es eso posible? Estoy usando Pandas y matplotlib. Gracias

La density=True ( normed=True para matplotlib < 2.2.0 ) devuelve un histogtwig para el cual np.sum(pdf * np.diff(bins)) es igual a 1. Si desea que la sum del histogtwig sea 1, puede usar El histogtwig de Numpy () y normaliza los resultados usted mismo.

 x = np.random.randn(30) fig, ax = plt.subplots(1,2, figsize=(10,4)) ax[0].hist(x, density=True, color='grey') hist, bins = np.histogram(x) ax[1].bar(bins[:-1], hist.astype(np.float32) / hist.sum(), width=(bins[1]-bins[0]), color='grey') ax[0].set_title('normed=True') ax[1].set_title('hist = hist / hist.sum()') 

introduzca la descripción de la imagen aquí

Btw: Extraño error de trazado en la primera bandeja del gráfico izquierdo.

Parece que @ CarstenKönig encontró la manera correcta :

 df.hist(bins=20, weights=np.ones_like(df[df.columns[0]]) * 100. / len(df)) 

El trazado de pandas puede aceptar cualquier argumento de palabra clave adicional de la función matplotlib respectiva. Entonces, para completar los comentarios de otros aquí, así es como uno lo haría:

 import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(100,2), columns=list('AB')) df.hist(density=1) 

Además, para una comparación directa, esto también puede ser una buena manera:

 df.plot(kind='hist', density=1, bins=20, stacked=False, alpha=.5) 

Puede simplificar la ponderación utilizando np.ones_like () :

 df["ColumnName"].plot.hist(weights = np.ones_like(df.index) / len(df.index)) 
  • np.ones_like () está de acuerdo con la estructura df.index
  • len (df.index) es más rápido para grandes DataFrames