python画图—堆叠柱
图形示例如下:
已经封装好的方法如下:
def dui(dataList,title,xlabel,xticks,ylabel,yticks,dataNameList,width = 0.35,colorList=['blue','green','red','yellow']):
newdataList=[]
for i in range(len(dataList[0])):
temp=[]
for j in range(len(dataList)):
temp.append(dataList[j][i])
newdataList.append(temp)
dataList=newdataList
plt.figure()
plt.title(title)
N = len(dataList[0])
ind = np.arange(N) # [ 0 1 2 3 4 5 6 7 8 9 10 11 12]
plt.xlabel(xlabel)
plt.xticks(ind,xticks )
plt.ylabel(ylabel)
plt.yticks(yticks)
if len(dataList) > 2:
d=[]
for i in range(2,len(dataList)):
tempd=[]
for j in range(len(dataList[i])):
sum = 0.0
for k in range(i):
sum=sum+dataList[k][j]
tempd.append(sum)
d.append(tempd)
#width = 0.35 # 设置条形图一个长条的宽度
p=[]
for i in range(len(dataList)):
if i==0:
pp=plt.bar(ind, dataList[i], width, color=colorList[i])
p.append(pp)
elif i==1:
pp= plt.bar(ind, dataList[i], width, bottom=dataList[0], color=colorList[i])
p.append(pp)
else:
pp=plt.bar(ind, dataList[i], width, bottom=d[i-2], color=colorList[i])
p.append(pp)
plt.legend([pp for pp in p], dataNameList, loc=len(dataList))
plt.show()
print(dataList)
elif len(dataList)==2:
width = 0.35 # 设置条形图一个长条的宽度
p1 = plt.bar(ind, dataList[0], width, color=colorList[0])
p2 = plt.bar(ind, dataList[1], width, bottom=dataList[0], color=colorList[1])
plt.legend([p1,p2], dataNameList, loc=len(dataList))
plt.show()
else:
print("错误")
使用示例如下:
dataList=[[47, 41, 11], [50, 44, 6], [41, 53, 6], [39, 52, 9]]
DuiDieZhu.dui1(dataList,"lll","nianfen",["1","2","3","4","5"],"acc",range(0,100,20),["1","2"],width = 0.35,colorList=['blue','green','red','yellow'])
#注意数据的装入格式:
#第一个列表装入为在第一个柱子要显示的数值,如第一个柱子要显示三种东西,就把这三个是数值装入一个列表,放在全部数据列表的第0个位置。**
效果图如上述: