長條圖是利用長條長度的不同來表示數量(百分比)的多少
一般在使用上常常會把長條圖跟直方圖搞混。長條圖的主要特徵是長條間不相連,類別間可以任意調換位置,因此一般會使用在非連續型資料上,例如:不同城市的人口數、不同產品的銷售量。直方圖則是長條間相連,因此一般會使用在連續型資料上,例如:身高分佈。
這次就利用python的Plotly套件來繪製簡單的橫向長條圖。
操作步驟
1.選定主題,準備素材
以2012年10大癌症藥費佔醫療花費的比例為例(資料來源為政府開放資料)。開始執行前需要先安裝plotly套件,在Window環境下,開起命令提示字元,輸入pip
install plotly,安裝完成後,就可進入繪圖步驟。
2.確認繪圖需要用到的參數
X軸(x):
各癌症的分類
Y軸(y):各癌症藥費佔醫療花費的比例(%)
3.繪製長條圖
語法:
import plotly.graph_objs as go
import plotly.offline as py
data= [go.Bar(
y=df_hb['Cancer'], #y軸欄位
x=df_hb['med_rate1'], #x軸欄位
orientation='h', #調整成橫向
text=df_hb['med_rate1'], #長條圖上標示資料數值
textposition = 'auto', #長條圖上標示資料數值的位子,有auto、inside、outside可以做設定
#長條圖顏色設定
marker=dict(
color='rgb(158,202,225)', #長條圖填滿部分顏色設定
line=dict(color='rgb(8,48,107)')) #長條圖外框顏色設定
)]
#圖表外層設定
layout=go.Layout(
title='2012年十大癌症藥費佔比', titlefont=dict(
size=22, color='#7f7f7f'), #設定標題名稱、字體大小、顏色
xaxis=dict(
title='百分比 (%)',titlefont=dict(size=18),
tickfont=dict(
size=16, color='rgb(107, 107, 107)') #設定X軸名稱、字體大小、顏色
),
yaxis=dict(
titlefont=dict(
size=16,color='rgb(107, 107, 107)' #設定Y軸字體大小、顏色
),
tickfont=dict(
size=18,color='rgb(107, 107, 107)' #設定Y軸標籤字體大小、顏色
)
),margin=go.Margin(l=180,r=60,b=50,t=60,pad=0,) #調整圖表的位子
)
fig = go.Figure(data=data, layout=layout) #將圖層合併
py.plot(fig,filename='grouped-bar')
利用以上的語法可以繪出基本長條圖,但是實務上可能會遇到某些項目需要特別用顏色凸顯的情況,以這個案子為例,假設當藥費佔總額醫療費用的比例大於60%時要特別做標示,凸顯重要性,這部分在plotly套件上可以做調整。
4.調整特定項目顏色顯示
以下做個演示:
在繪製Bar圖時做設定即可(位於前段語法的第3行),因此只須修改以下這部分
data= [go.Bar(
y=df_hb['Cancer'], # assign x as the dataframe column 'x'
x=df_hb['med_rate1'],
orientation='h',
text=df_hb['med_rate1'],
textposition = 'auto',
marker=dict(
color=['rgba(158,202,225,0.8)', 'rgba(158,202,225,0.8)','rgba(158,202,225,0.8)',
'rgba(158,202,225,0.8)','rgba(158,202,225,0.8)','rgba(158,202,225,0.8)',
' rgba(158,202,225,0.8)',' rgba(158,202,225,0.8)', ' rgba(158,202,225,0.8)',
'rgba(255,160,122,0.8)'],
line=dict(
color=['rgb(8,48,107)','rgb(8,48,107)','rgb(8,48,107)','rgb(8,48,107)',
'rgb(8,48,107)','rgb(8,48,107)',' rgb(8,48,107)','rgb(8,48,107)','rgb(8,48,107)',
'rgb(205,38,38)'], width=1.5))
)]
留言
張貼留言