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

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

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

在此处输入图片说明

以上是 具有多个图例条目的Matplotlib直方图 的全部内容, 来源链接: utcz.com/qa/418056.html

回到顶部