首先,這是我們的資料:
data = pd.read_csv("opendata.csv")
讓我們先用樞紐分析的功能整理我們所需的資料:
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()