histogtwig matplotlib con leyenda

Tengo este código que produce un histogtwig, identificando tres tipos de campos; “Bajo”, “medio” y “alto”:

import pylab as plt import pandas as pd df = pd.read_csv('April2017NEW.csv', index_col =1) df1 = df.loc['Output Energy, (Wh/h)'] # choose index value and Average df1['Average'] = df1.mean(axis=1) N, bins, patches = plt.hist(df1['Average'], 30) cmap = plt.get_cmap('jet') low = cmap(0.5) medium =cmap(0.25) high = cmap(0.8) for i in range(0,4): patches[i].set_facecolor(low) for i in range(4,11): patches[i].set_facecolor(medium) for i in range(11,30): patches[i].set_facecolor(high) plt.xlabel("Watt Hours", fontsize=16) plt.ylabel("Households", fontsize=16) plt.xticks(fontsize=14) plt.yticks(fontsize=14) ax = plt.subplot(111) ax.spines["top"].set_visible(False) ax.spines["right"].set_visible(False) plt.show() 

que produce esto:

introduzca la descripción de la imagen aquí

¿Cómo consigo una leyenda para los tres colores diferentes?

Necesitarías crear la leyenda tu mismo. Para este fin, cree algunos rectangularjs, que no se muestran en la figura (los llamados artistas proxy).

 #create legend handles = [Rectangle((0,0),1,1,color=c,ec="k") for c in [low,medium, high]] labels= ["low","medium", "high"] plt.legend(handles, labels) 

Ejemplo completo:

 import matplotlib.pyplot as plt import numpy as np from matplotlib.patches import Rectangle data = np.random.rayleigh(size=1000)*35 N, bins, patches = plt.hist(data, 30, ec="k") cmap = plt.get_cmap('jet') low = cmap(0.5) medium =cmap(0.25) high = cmap(0.8) for i in range(0,4): patches[i].set_facecolor(low) for i in range(4,11): patches[i].set_facecolor(medium) for i in range(11,30): patches[i].set_facecolor(high) #create legend handles = [Rectangle((0,0),1,1,color=c,ec="k") for c in [low,medium, high]] labels= ["low","medium", "high"] plt.legend(handles, labels) plt.xlabel("Watt Hours", fontsize=16) plt.ylabel("Households", fontsize=16) plt.xticks(fontsize=14) plt.yticks(fontsize=14) plt.gca().spines["top"].set_visible(False) plt.gca().spines["right"].set_visible(False) plt.show() 

introduzca la descripción de la imagen aquí

Según yo, solo necesita pasar la etiqueta requerida como un argumento en la función hist , por ejemplo,

 plt.hist(x, bins=20, alpha=0.5, label='my label') 

Vea el ejemplo también aquí https://matplotlib.org/examples/statistics/histogram_demo_multihist.html