首先這是我們的資料
import pandas as pd
data = pd.read_excel("新竹各觀光景點人次.xlsx").round()
#建立欄位清單
col_list = data.columns.to_list()
#移除不需要的項目
col_list.remove("民國年月")
#建立新欄位清單(準備用來存放百分比數值)
new_col_list = []
for i in col_list:
new_col_list.append(i[0:-2])
#計算總人次
data["總人次"] = data[col_list].sum(axis=1)
#建立百分比數值欄位
for i,j in zip(col_list,new_col_list):
data[j] = data[i]/data["總人次"]
#建立Y軸欄位
date_list = []
data["民國年月"] = data["民國年月"].astype("str")
for i in data["民國年月"]:
date_list.append(i[0:3]+"\n"+i[3:5])
data["調整後年月"] = date_list
import matplotlib
#設定中文字體
matplotlib.rc("font",family="Microsoft Yahei")
import matplotlib.pyplot as plt
#設定圖表大小
plt.figure(figsize=(24,12))
#設定子圖位置
ax = plt.subplot2grid((1,1),(0,0))
#設定堆疊起始值
start=0
#設定顏色list
color_list = ["lightcoral","lightsalmon","lightgreen","lightcyan","lightsteelblue","lightyellow","lightseagreen","plum"]
#繪圖
for i,j in zip(new_col_list,color_list):
#設定X、Y列
ax_x = data["調整後年月"]
ax_y = data[i]
#繪製長條圖
ax.bar(ax_x,ax_y,bottom=start,color=j,label=i,width=0.9)
#堆疊起始值
start = start + ax_y
#顯示百分比>3%的數值
for a,b,c in zip(ax_x,start,ax_y):
if c>0.03:
ax.text(a, b-(c/2), str(round(c*100))+"%", horizontalalignment="center", verticalalignment="center", fontsize=10 )
#設定Y軸為空
ax.set_yticks([])
#刪除上、左、右邊的圖框
ax.spines[["top","left","right"]].set_visible(False)
#設定標題
ax.set_title("新竹各景點遊覽人次",fontsize=18,y=0.96)
#設定圖例
plt.legend(bbox_to_anchor=(0.80,-0.05),ncols=8,fontsize=12)