首先這是我的資料-台灣好行的公開資料:
import pandas as pd
data = pd.read_csv("opendata.csv")
首先,因為資料中113年度的資料只有一月,所以我打算刪除年度為113年的資料:
#建立一個我們不要的年份的行的index的List
ListYearDrop = []
#用列舉的方法建立一個列舉每個年的List,index從0開始
#再用for迴圈,讓每次讀到指定的年份時,就將該年份的index記錄下來
for index, value in enumerate(data["年度"],0):
if value == 113:
ListYearDrop.append(index)
#用drop,丟掉我們不要的年份該行的資料
data.drop(index=ListYearDrop,inplace=True)
資料準備好後,我們就可以開始繪圖了
import matplotlib
#選擇中文字體
matplotlib.rc("font",family="Microsoft YaHei")
from matplotlib import pyplot as plt
#繪製圖表大小
plt.figure(figsize=(16,4))
#繪製一個位於包含1X1個子圖的圖且位置在(0,0)的子圖
ax0 = plt.subplot2grid((1,1),(0,0),colspan=1,rowspan=1)
#--------------------------------
#建立x軸資料
ax0_x = data["年度"].astype("str") + "年\n" + data["月份"].astype("str") + "月"
#建立y軸資料(這次我們想呈現兩條折線)
ax0_y1 = data["本月累計搭乘人次"]/10000
ax0_y2 = data["本月電子票證累計使用人次"]/10000
#--------------------------------
##繪製第一條折線圖
#繪圖
ax0.plot(ax0_x,ax0_y1,color="green",label="本月累計搭乘人次")
#決定y軸座標軸上下限
ax0.set_ylim(0,500)
#決定y軸座標軸座標與標籤
ax0.set_yticks([100,200,300,400,500])
ax0.set_yticklabels(["100萬","200萬","300萬","400萬","500萬"])
#--------------------------------
##繪製第二條折線圖
ax0.plot(ax0_x,ax0_y2,color="lightgray",label="本月電子票證累計使用人次")
#--------------------------------
#繪製圖例
ax0.legend(bbox_to_anchor=(0.2,0.95),prop = {"size":10})
#繪製平均線
ax0.hlines(ax0_y1.mean(),0,len(ax0_x)-1,linestyles="--",color="green")
ax0.text(0,ax0_y1.mean()+10,"平均" + str(ax0_y1.mean().round(2)) + "萬",color="green")
ax0.hlines(ax0_y2.mean(),0,len(ax0_x)-1,linestyles="--",colors="lightgray")
ax0.text(0,ax0_y2.mean()+10,"平均" + str(ax0_y2.mean().round(2)) + "萬",color="lightgray")
#設定圖的標題
plt.title("台灣好行:每月累計搭乘人次與電子票證累計使用人次")
plt.tight_layout()