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

如何用Python繪製直方圖

首先,這是我們的資料:

data = pd.read_csv("opendata.csv")
raw-image

讓我們先用樞紐分析的功能整理我們所需的資料:

pvtData = data.pivot_table(values="嬰兒出生數",index="出生時體重",columns="性別",aggfunc="sum").reset_index()

現在我們可以開始繪製圖表,但在繪圖前,我們可以設定圖表的中文字型:

import matplotlib

matplotlib.rc("font",family="Microsoft YaHei")

以下是繪圖的程式碼範例,提供給大家參考:

from matplotlib import pyplot as plt

#設定圖片的大小plt.figure(figsize=(8,8))

#創建第一個子圖ax0,放在一個1欄*2列的圖裡,位置是在第一欄、第一列
ax0 = plt.subplot2grid((2,1),(0,0),colspan=1,rowspan=1)
#創建第二個子圖ax1,位置是在第一欄、第二列
ax1 = plt.subplot2grid((2,1),(1,0),colspan=1,rowspan=1)

#--------------------------------

##繪製第一個子圖#設定x、y值
ax0_x = pvtData["出生時體重"]ax0_y = pvtData["女"]

#繪製長條圖
ax0.bar(x=ax0_x,height=ax0_y)

#設定x軸標籤與刻度為空值
ax0.set_xticklabels([])ax0.set_xticks([])

#設定y軸的上下限
ax0.set_ylim(0,35000)

#設定每個Bar的數值
for x,y,z in zip(ax0_x,ax0_y,ax0_y):   
ax0.text(x,y+400,str(z)+"人",ha="center",fontsize=9)

#設定文字註解
ax0.text(-0.75,32500,"男生",fontsize=12)

#--------------------------------

##繪製第二個子圖#設定x、y值
ax1_x = pvtData["出生時體重"]ax1_y = pvtData["男"]

#繪製長條圖
ax1.bar(x=ax1_x,height=ax1_y)

#因x軸標籤值太長,會重疊覆蓋到彼此,所以先建立有分行的List
ax1_x_list=[]
for i in ax1_x:   
    if "~" in i :
        text = i.split("~")[0] + "~\n" + i.split("~")[1]
    else:
        text = i.split("克")[0] + "克\n" + i.split("克")[1]
    ax1_x_list.append(text)

#設定x軸的標籤為有分行的List
ax1.set_xticklabels(ax1_x_list)

#設定x軸的刻度位置依List的長度依序排列
ax1.set_xticks(range(0,len(ax1_x)))

#設定x軸的名稱
ax1.set_xlabel("出生時體重")

#設定y軸的上下限
ax1.set_ylim(0,35000)

#設定每個Bar的數值
for x,y,z in zip(ax1_x,ax1_y,ax1_y):   
ax1.text(x,y+400,str(z)+"人",ha="center",fontsize=9)

#設定文字註解ax1.text(-0.75,32500,"女生",fontsize=12)
ax1.text(-0.75,32500,"女生",fontsize=12)

#--------------------------------

#設定圖框標題
plt.suptitle("112年不同性別不同體重嬰兒的人數",y=0.97)

plt.tight_layout()
















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