matplotlib设置堆积条形图标签

时间:2018-06-01 21:13:59

标签: python-3.x matplotlib

我正在尝试创建一个堆叠条形图,按操作系统对数据进行分组。我在为每个栏中的每个组件创建单独的标签时遇到了问题。

我尝试做的事情与example in the docs不同,因为在我的数据中,每个类别只出现在一个条形图中,而在示例中,每个条形图包含每个类别中的一个成员。

目前我有这段代码

plt.cla()
plt.clf()
plt.close()

def get_cmap(n, name='hsv'):
    '''Returns a function that maps each index in 0, 1, ..., n-1 to a distinct 
    RGB color; the keyword argument name must be a standard mpl colormap name.'''
    return plt.cm.get_cmap(name, n)

fig = plt.figure(figsize=(18, 10), dpi=80)

# group by the prefixes for now
prefixes = []
indices = []
bars = []
legend = {}
cmap = get_cmap(len(os_counts.index) + 1)
k = 0
for i, prefix in enumerate(d):
    indices.append(i)
    if len(d[prefix]["names"]) == 1:
        prefixes.append(d[prefix]["names"][0])
    else:
        prefixes.append(prefix)
    #colors = [next(cycol) for j in range(len(d[prefix]["names"]))]
    colors = [cmap(k + j) for j in range(len(d[prefix]["names"]))]
    k += len(colors)
    bar = plt.bar([i] * len(d[prefix]["names"]), d[prefix]["values"], color=colors, label=d[prefix]["names"])
    bars.append(bar)


plt.xticks(rotation=90)
plt.ylabel("Frequency")
plt.xlabel("Operating System")
plt.xticks(indices, prefixes)
plt.legend()
plt.show()

产生这个结果。如您所见,为条形图中的第一种颜色创建了图例,并显示了一个数组。 enter image description here

1 个答案:

答案 0 :(得分:0)

我认为每次调用plt.bar都会获得一个标签。所以,你给它一个列表作为每个plt.bar调用的标签。如果你想要每种颜色的标签,代表每个操作系统,那么我认为解决方案是为每种颜色或操作系统调用一次plt.bar。