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

时间:2017-06-21 17:40:38

标签: python python-2.7 matplotlib bar-chart data-visualization

我有一些数据我想在2个堆积的条形图中显示(并排)。使用matplotlib。

data _null_;
  merge count1(rename=(count=count1)) count2(rename=(count=count2));
  if count1 ne count2 then abort abend ;
run;

以上代码显示以下图表: enter image description here

在我看来,红色条(VM)没有堆叠在其余条形图的顶部,导致图形的奇怪外观(尽管我指定了正确的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() 属性。在每个栏中应该总计为1。我该如何解决这个问题?

编辑:

我能够通过使用以下相当混乱的代码将bottom属性设置为较低条的总和而不是仅显示较低条的总和来解决此问题:

bottom

有更好的方法吗?它有更多的条形,不能很好地扩展。

1 个答案:

答案 0 :(得分:0)

每次迭代数据并调用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()来获取索引,以便我们可以使用它来获取标签。