Python Matplotlib图例仅显示列表中的第一个条目

7

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

我的标签数组为:

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

我用以下代码添加图例:
```html

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

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

我看到的只有右上角的“Google”,如何显示所有标签? 输入图像说明
完整代码:
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()

你能给我们提供完整的代码吗? - Ffisegydd
1
你的问题在于你只绘制了一次,使用了单个 ax.bar。因此,你的图例只有一个项目。你修改其他条形图的颜色是无关紧要的。 - Ffisegydd
2个回答

4

@Ffisegydd的答案可能更加实用,但它没有回答问题。只需为图例创建单独的条形图即可获得所需的结果:

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

ax.legend()

在此输入图片描述

* 如果查看者是色盲(或者这个图案被打印成黑白),那么这种展示方式可能会有害。请思考一下可能会发生什么。


如何隐藏X轴上的值? - NEO
1
@Naren https://dev59.com/c3I95IYBdhLWcg3wvgl9 - Hooked
忘记搜索了:D 谢谢! - NEO

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


我需要在右上角显示图例。@Ffisegydd,你能否将图例显示在右上角,而不是在x轴标签中显示? - NEO
我使用了ax.legend(lab)。只有“Google”出现了。如何获得其他标签? - NEO
即使您没有直接解决图例的问题,这种解决方案在信息的图形表示方面更为优越。当从左到右移动时,条形代表不同的信息。为什么不在那里标记它们,而不是在图例中自上而下重复颜色呢? - Bas Swinckels
我稍微编辑了一下问题,考虑到这一点,编辑在 x 轴刻度上添加了一个旋转。如果需要的话,这应该可以帮助您适合更多的数据条。 - Ffisegydd
@Ffisegydd 我确实尝试过,看起来很不错。但是你能告诉我为什么我无法在图例中获得多个标签吗? - NEO
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接