2024-05-24|閱讀時間 ‧ 約 24 分鐘

如何用Python繪製盒鬚圖

首先這是我們的資料:

raw-image


但這是單月的,從政府資料開放平台下載的資料的各月資料如下:

所以我們要先把資料統整成一個檔案:

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()



分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.