我正在尝试创建一个堆叠条形图,按操作系统对数据进行分组。我在为每个栏中的每个组件创建单独的标签时遇到了问题。
我尝试做的事情与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()
答案 0 :(得分:0)
我认为每次调用plt.bar都会获得一个标签。所以,你给它一个列表作为每个plt.bar调用的标签。如果你想要每种颜色的标签,代表每个操作系统,那么我认为解决方案是为每种颜色或操作系统调用一次plt.bar。