首先這是我們的資料:
但這是單月的,從政府資料開放平台下載的資料的各月資料如下:
所以我們要先把資料統整成一個檔案:
import pandas as pd
import os
#建立一個包含所有檔案名稱的list
data_list = os.listdir("D:/Desktop/@PROJECT/Python/盒鬚圖/臺中捷運全系統旅運量統計/")
#建立一個空list把所有檔案放進來
data_concat = []
for i in data_list:
j = i.split(".")[0] #j為不含副檔名的檔案名稱
globals()[f"data_{j}"] = pd.read_csv(f"D:/Desktop/@PROJECT/Python/盒鬚圖/臺中捷運全系統旅運量統計/{i}")
data_concat.append(globals()[f"data_{j}"])
#將list中的所有檔案合併為一個檔案,並忽視原有的index
data_all = pd.concat(data_concat,ignore_index=True)
最終的資料如下:
接著我們就可以開始繪圖了:
import matplotlib
#設定中文字體
matplotlib.rc("font",family="Microsoft YaHei")
from matplotlib import pyplot as plt
#設定圖的大小
plt.figure(figsize=(12,6))
#設定子圖位置
ax = plt.subplot2grid((1,1),(0,0))
#建立放x值與y值的空list
ax_x = []
ax_y = []
#將ax_x放入x軸標籤,ax_y放入各星期的資料
for i in ["星期一","星期二","星期三","星期四","星期五","星期六","星期日"]:
ax_x.append(i)
globals()[f"data_{i}"] = data_all[data_all["星期"]==i]
ax_y.append(globals()[f"data_{i}"]["總運量"])
#繪製盒鬚圖
ax.boxplot(ax_y,
patch_artist=True,
boxprops=dict(facecolor="lightgray"), #設定盒體顏色
medianprops=dict(color="steelblue") #設定中位數線的顏色
)
#設定x軸標籤
ax.set_xticks(range(1,8))
ax.set_xticklabels(ax_x)
#設定y軸大小值與標籤
ax.set_ylim(10000,70000)
ax.set_yticks(list(map(lambda x:x*10000,[1,2,3,4,5,6,7])))
ax.set_yticklabels(list(map(lambda x:str(x)+"萬人",[1,2,3,4,5,6,7])))
#設定文字
for a,b in zip(range(1,8),ax_y):
ax.text(a, #x軸位置
b.median()+300, #y軸位置
str(round(b.median()))+"人", #顯示文字
horizontalalignment="center", #水平方位相對位置
color="steelblue", #字體顏色
fontsize=10 #設定字體大小
)
#設定標題
ax.set_title("2023/06~2024/04 臺中捷運全系統旅每日運量統計")
plt.tight_layout()