python matplotlib图例仅显示列表的第一个条目

时间:2014-04-26 22:23:15

标签: python matplotlib

我无法将所有图例都显示在matplotlib中。

我的标签数组是:

lab = ['Google', 'MSFT', 'APPL', 'EXXON', 'WMRT']

我使用以下代码添加图例:

ax.legend(lab,loc="best")

我只看到谷歌'在右上角。如何显示所有标签? enter image description here

完整代码:

import numpy as np
import matplotlib.pyplot as plt
from itertools import cycle, islice

menMeans = (8092, 812, 2221, 1000, 562)
N = len(menMeans)

lab = ['Google', 'MSFT', 'APPL', 'EXXON', 'WMRT']

ind = np.arange(N)  # the x locations for the groups
width = 0.35       # the width of the bars

fig, ax = plt.subplots()
my_colors = list(islice(cycle(['b', 'r', 'g', 'y', 'k']), None, N))
rects1 = ax.bar(ind, menMeans, width, color=my_colors,label=lab)

# add some
ax.set_ylabel('Count')
ax.set_title('Trending words and their counts')
ax.set_xticks(ind+width)
ax.legend(lab,loc="best")
plt.show()

2 个答案:

答案 0 :(得分:3)

你的问题是你只用一个ax.bar绘制一次,因此你的传说只能有一个项目(对于那一个情节)。对于您的绘图脚本,解决此问题的一种方法是更改​​xticks和xticklabels,如下所示。

创建图例时,您可以为通过绘图创建的每个matplotlib.artist对象创建一个条目。这些对象可以是条形图中的一组数据点,一条线或一组条形。如果您的条形图中有5个或10个条形,那么无关紧要您仍然只绘制了一个条形图。这意味着您最终只会在图例中有一个条目。

我已使用ax.set_xticks(ind+width/2)直接将标记位置放在条形图下方,然后使用lab列表和ax.set_xticklabels(lab)设置这些标记。

import numpy as np
import matplotlib.pyplot as plt
from itertools import cycle, islice
import matplotlib.ticker as mtick

menMeans = (8092, 812, 2221, 1000, 562)
N = len(menMeans)

lab = ['Google', 'MSFT', 'APPL', 'EXXON', 'WMRT']

ind = np.arange(N)  # the x locations for the groups
width = 0.35       # the width of the bars

fig, ax = plt.subplots()

my_colors = list(islice(cycle(['b', 'r', 'g', 'y', 'k']), None, N))

rects1 = ax.bar(ind, menMeans, width, color=my_colors,label=lab)

ax.set_ylabel('Count')
ax.set_title('Trending words and their counts')

plt.xticks(rotation=90)

ax.set_xticks(ind+width/2)
ax.set_xticklabels(lab)

plt.show()

Plot

答案 1 :(得分:3)

@Ffisegydd的回答可能更多有用 *,但它没有回答这个问题。只需为图例创建单独的条形图,您就可以获得所需的结果:

for x,y,c,lb in zip(ind,menMeans,my_colors,lab):
    ax.bar(x, y, width, color=c,label=lb)

ax.legend()

enter image description here

*要了解此演示文稿可能有害的原因,请考虑如果观看者是色盲(或者是黑白打印)会发生什么。