我有这段代码可以生成直方图,标识出三种类型的字段。“低”,“中”和“高”:
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()
产生这个:
如何在其中获得三种不同颜色的图例?
您需要自己创建图例。为此,创建一些未在图中显示的矩形(所谓的代理艺术家)。
#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)
完整的例子:
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()