我无法将所有图例都显示在matplotlib中。
我的标签数组是:
lab = ['Google', 'MSFT', 'APPL', 'EXXON', 'WMRT']
我使用以下代码添加图例:
ax.legend(lab,loc="best")
我只看到谷歌'在右上角。如何显示所有标签?
完整代码:
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()
答案 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()
答案 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()
*要了解此演示文稿可能有害的原因,请考虑如果观看者是色盲(或者是黑白打印)会发生什么。