[英]Python Bar Chart not Displaying Correctly (Matplotlib)
我有一些数据我想在2个堆叠的条形图中显示(并排)。 使用matplotlib。
keys=['BF', 'VL', 'GM', 'VM']
data=[[0.10992407597195027, 0.084754817342900857],
[0.20119173770112833, 0.24308696457787043],
[0.49912704691619575, 0.53468456580435009],
[0.18975713941072578, 0.13747365227487865]]
x = range(2)
f, ax1 = plt.subplots(1, figsize=(10,5))
plt.bar(x,data[0], label=keys[0])
plt.bar(x,data[1], bottom=data[0], label=keys[1])
plt.bar(x,data[2], bottom=data[1], label=keys[2])
plt.bar(x,data[3], bottom=data[2],label=keys[3])
plt.legend(loc='upper left')
plt.show()
在我看来,红色条(VM)没有堆叠在其余条形的顶部,导致图形的奇怪外观(尽管我指定了正确的bottom
属性。每个条形图中的数据应总和为1确切地说。我该如何解决这个问题?
通过使用以下相当混乱的代码将bottom
属性设置为较低的条的总和,而不是仅显示较低的条,我能够解决问题:
plt.bar(x,data[0], width = bar_width, label=keys[0])
plt.bar(x,data[1], width = bar_width, bottom=data[0], label=keys[1])
plt.bar(x,data[2], width = bar_width, bottom=[data[0][i]+data[1][i] for i in x], label=keys[2])
plt.bar(x,data[3], width = bar_width, bottom=[data[0][i]+data[1][i]+data[2][i] for i in x],label=keys[3]
有一个更好的方法吗? 它更难以适应更多的条形。
迭代数据并每次调用bar()都是有意义的。 我没有测试过这个,但它应该足以开始了。
y_pos_1 = y_pos_2 = 0
for k, v in enumerate(data):
abs_bottom = [y_pos_1, y_pos_2]
plt.bar(x, v, bottom=abs_bottom, label=keys[k])
y_pos_1 += v[0]
y_pos_2 += v[1]
基本上只是保持每个栏底部的滚动计数。 使用enumerate()来获取索引,以便我们可以使用它来获取标签。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.