我有这个代码生成一个直方图,识别三种类型的字段; "低","中" ,和"高":
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()
产生这个:
如何在这里获得三种不同颜色的图例?
答案 0 :(得分:12)
您需要自己创建图例。为此,创建一些未在图中显示的矩形(所谓的代理艺术家)。
#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()
答案 1 :(得分:8)
根据我的说法,您只需要在hist
函数中将所需的标签作为参数传递,例如
plt.hist(x, bins=20, alpha=0.5, label='my label')
另请参见示例https://matplotlib.org/examples/statistics/histogram_demo_multihist.html