1. 程式人生 > >Python繪製堆疊柱狀圖

Python繪製堆疊柱狀圖

Python繪製堆疊柱狀圖

有個朋友要求幫忙繪製堆疊柱狀圖,查閱了一些文件之後也算是完成了,只是一個小demo,下面我就記錄一下。

1.什麼是堆疊柱狀圖

與並排顯示分類的分組柱狀圖不同,堆疊柱狀圖將每個柱子進行分割以顯示相同型別下各個資料的大小情況。它可以形象的展示一個大分類包含的每個小分類的資料,以及各個小分類的佔比,顯示的是單個專案與整體之間的關係。效果圖如下:

2.資料展示

這裡展示了部分資料,主要是treatment就是對應的上圖分類一,分類二;species就是對應的分組;ra就是對應的各個分組的比例。

3.Python程式碼

from matplotlib import pyplot as plt
import pandas as pd
import xlrd
import numpy as np

data = xlrd.open_workbook('ccc.xlsx')   #開啟資料
table = data.sheet_by_index(0)          #獲取sheet1的資料
nrows = table.nrows                     #獲取sheet1中的行
plot_list = ['plot1']
plot1_ra_list = [[0] for i in range(17)]#構建一個17X1的列表
i = 0
for row in range(1,nrows):              #迴圈讀取表內資料
    if table.cell(row,0).value == 2015.0 and table.cell(row,1).value == 'plot1':
        print(table.cell(row, 3).value) #第三列是各個元素所佔的比例
        print(i)
        plot1_ra_list[i][0]=(float(table.cell(row, 3).value))
        i+=1
#顏色列表
color = ['y','r','snow','b','k','g','orange','c','bisque','brown','lime','aqua','coral','darkcyan','gold','teal','pink',]
plt.figure(figsize=(8,6))
for i in range(17):
    plt.bar(range(len(plot1_ra_list[i])), plot1_ra_list[i],bottom=np.sum(plot1_ra_list[:i],axis = 0),label=str(i+1),tick_label = plot_list,fc = color[i])
plt.legend()
plt.show()




4.效果展示

上述程式碼我只做了2015年的plot1,如果要把plot2增加上注意要對齊plot1和plot2的species數量,可以認為的新增,並補充對應的ra為0,這樣子也不影響整個做圖。下面我PO一張demo。