python画图—堆叠柱

图形示例如下:
image.png
已经封装好的方法如下:

 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个位置。**

效果图如上述:
image.png