跳到主要內容

使用python繪製視覺化--堆疊長條圖



堆疊長條圖屬於長條圖的一種,可以做組內、組間比較。
²  組內比較: 同一個長條中不同項目所佔的比重。
²  組間比較:比較不同長條圖中,某一個項目佔的比重大小。

有了基本的概念與構思好主題後,就可以利用pythonPlotly套件來繪製簡單的堆疊長條圖了。


🌞操作步驟
1.選定主題,準備素材
201510大癌症診斷的臨床期別分佈為例(資料來源為整理國健署癌症開放資料),來看不同癌症診斷時的期別分佈情況。開始執行前,尚未安裝plotly者需要先安裝plotly套件,在Window環境下,開起命令提示字元,輸入pip install plotly,安裝完成後,就可進入繪圖步驟。

2.確認繪圖需要用到的參數:
X(x): 不同期別所佔的比例(%)
Y(y): 各癌症的分類

3.繪製堆疊長條圖

這邊要注意一下,操作時每一個分層要各別建構,再把各分層的圖層結合成一張圖。


import plotly.graph_objs as go
import plotly.offline as py

#分層為stage0
data1= go.Bar(
        y=df['stage0_rate'], #y軸欄位
        x=df['Cancer'], #x軸欄位
        name='stage0') #圖例名稱
#分層為stage1
data2= go.Bar(
        y=df['stage1_rate'], 
        x=df['Cancer'],
        name='stage1')
#分層為stage2
data3= go.Bar(
        y=df['stage2_rate'], 
        x=df['Cancer'],
        name='stage2')
#分層為stage3
data4= go.Bar(
        y=df['stage3_rate'], 
        x=df['Cancer'],
        name='stage3')
#分層為stage4
data5= go.Bar(
        y=df['stage4_rate'], 
        x=df['Cancer'],
        name='stage4')
#分層為missing
data6= go.Bar(
        y=df['missing_rate'], 
        x=df['Cancer'],
        name='missing')

#把各分層結合
data = [data1, data2,data3,data4,data5,data6]
layout = go.Layout(
    barmode='stack', #設定為堆疊長條圖
    title='2015年十大癌症診斷期別分佈', titlefont=dict(family='Courier New, monospace', size=22, color='#7f7f7f'), #設定標題名稱、字體大小、顏色
    xaxis=dict(        
        titlefont=dict(
            size=16,color='rgb(107, 107, 107)'#設定X軸字體大小、顏色
        ),
        tickfont=dict(
            size=16, color='rgb(107, 107, 107)') #設定X軸標籤字體大小、顏色
        ),    
    yaxis=dict(
        title='百分比 (%)',titlefont=dict(size=18), #設定Y軸名稱、字體大小
        tickfont=dict(
            size=16, color='rgb(107, 107, 107)'#設定Y軸標籤、字體大小、顏色
        )
    ),margin=go.Margin(l=100,r=60,b=50,t=60,pad=0,) #調整圖表的位子
)

fig = go.Figure(data=data, layout=layout)
py.plot(fig, filename='stacked-bar')

在未經調整的情況下,預設的配色並不美觀,視覺上沒那麼舒適,因此接下來的步驟要調整色彩的配置。

4.調整色彩配置
以下做個演示:

須針對每一個Bar圖分別做色彩調整,以下以stage0圖層為例進行色彩調整。
data1= go.Bar(
        y=df['stage0_rate'], 
        x=df['Cancer'],
        name='stage0',
        marker=dict(
        color='#FEDFE1'))



網路上搜尋”RGB配色表就有非常多的資源可參考,但常遇到使用的顏色與色卡有落差,或是參考色號不夠豐富的問題,這邊要推薦大家一個好用的網站日本傳統色彩網,提供色號精準、豐富,可以省去使用者不少功夫。

留言