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

如何使用matplotlib创建堆叠条形图,matplotlib,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 location

我试图使用以下代码使用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,所以如果我理解正确,你并不真的想要一个堆叠条形图,你想要
w
m
后面绘图。您可以通过将
m
zorder
设置为低于
w

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

或者,如果要保留
bottom=m
选项,则需要从
w
中减去
m
。首先,需要将
m
w
转换为
numpy.array
。然后您可以像这样绘制
p2

p2 = plt.bar(ind, np.maximum(w-m,0), width, color='y',bottom=m)

请注意,您必须使用
np.maximum
来防止
w
变为负值,例如,当
m=40
w=0

谢谢这个权利,我还有一个问题,我有一些范围,例如0-5正常6-10正常11-25我补漏白和26-35正常我如何在单个条上显示这个范围不同颜色但相同类别的标签应该有相同的颜色我想要这个值单条,而不是2-3条,不同颜色和同一类别应具有相同的颜色