繁体   English   中英

Python条形图未正确显示(Matplotlib)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM