如何使用matplotlib创建堆叠条形图

时间:2015-10-13 07:07:17

标签: matplotlib

我正在尝试使用matplotlib使用以下代码创建堆栈条形图,但第二部分的起点和终点是错误的

import numpy as np
import matplotlib.pyplot as plt

N = 7
m = (5,10,30,40,0,0,0)      #(0-5,0-10,26-30,36-40)
w = (15,25,35,0,0,0,0)      #(11-15,16-25,31-35)
ind=[5,10 ,15 ,25 ,30,35,40] 
# the x locations for the groups
width = 0.55       # the width of the bars: can also be len(x) sequence

p1 = plt.bar(ind, m, width, color='r')
p2 = plt.bar(ind, w, width, color='y',bottom=m)

plt.show()

但是#(0-5,0-10,26-30,36-40) #(11-15,16-25,31-35)条形图彼此但是我希望第一部分是0到5而第二部分将是6到15但它给出了5 + 15 = 20这是错误的我不是想加入它。我的意思是如果第一部分是0-5而第二部分是6-15,那么它将显示0-5和6-15而不是5 + 15 = 20

1 个答案:

答案 0 :(得分:0)

因此,如果我理解正确,您不需要堆积条形图,您希望wm后面绘制。您可以将zorder的{​​{1}}设置为低于m

w

enter image description here

或者,如果您想保留p1 = plt.bar(ind, m, width, color='r',zorder=2) p2 = plt.bar(ind, w, width, color='y',zorder=1) 选项,则需要从bottom=m中减去m。首先,您需要将wm转换为w。然后你可以像这样绘制numpy.array

p2

请注意,您必须使用p2 = plt.bar(ind, np.maximum(w-m,0), width, color='y',bottom=m) 来防止np.maximum变为否定,例如wm=40