具有多个图例条目的Matplotlib直方图

发布于 2021-01-29 14:09:42

我有这段代码可以生成直方图,标识出三种类型的字段。“低”,“中”和“高”:

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
被浏览
173
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您需要自己创建图例。为此,创建一些未在图中显示的矩形(所谓的代理艺术家)。

    #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()
    

    在此处输入图片说明



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看