Matplotlib/seaborn 直方图使用不同颜色的分组箱

war*_*nry 7 python matplotlib seaborn

我有这个代码,使用熊猫 df:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import os


path_to = 'Data\\2017-04\\MonthlyData\q1analysis\Energy Usage'  # where to save

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)
print df1
print df1['Average'].describe()

def hist():
    p = sns.distplot(df1['Average'],kde=False, bins=25).set(xlim=(0, 100));
    plt.xlabel('Watt hours')
    plt.ylabel('Households')

    return plt.show()
Run Code Online (Sandbox Code Playgroud)

返回:

在此处输入图片说明

我想使用三种不同的颜色(低、中、高)来用图例表示 x = 轴上的更高值,如下所示:

在此处输入图片说明

编辑1:

我找到了这个例子:here,所以我想用这个。

我想出了这个: 在此处输入图片说明 几乎就在那里。如何将范围分成 3 个,具有 3 种不同的颜色?

war*_*nry 6

解决方案:

N, bins, patches = plt.hist(df1['Average'], 30)

cmap = plt.get_cmap('jet')
low = cmap(0.5)
medium =cmap(0.2)
high = cmap(0.7)


for i in range(0,3):
    patches[i].set_facecolor(low)
for i in range(4,13):
    patches[i].set_facecolor(medium)
for i in range(14,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()
Run Code Online (Sandbox Code Playgroud)

输出:

在此输入图像描述