如何用Python繪製直方圖

2024/04/01閱讀時間約 4 分鐘

首先,這是我們的資料:

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

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

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

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

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
















1會員
20內容數
我是果農,這裡有我的人資職涯經驗分享,與我菜鳥般的Python資料分析筆記,還有一些讀書心得,希望對大家有幫助。
留言0
查看全部
發表第一個留言支持創作者!