在股票分析中,除了每天的收盤價,我們常常也會想知道「整個月的平均股價走勢」。這樣可以平滑掉每日的波動,讓趨勢更清楚。今天的目標,就是透過 折線圖,把台積電 (2330) 的「月平均收盤價」畫出來,並搭配成交量,做成雙子圖。
每天的收盤價會受到短期市場情緒影響,數字起伏大。透過計算「月平均收盤價」:
假設我們已經有一個 DataFrame,裡面包含以下欄位:
接著,我們把每日資料整理成「每月」資料。這裡用 groupby 搭配 Grouper:
df['Date'] = pd.to_datetime(df['Date'])
df = df.sort_values('Date')
monthly = df.groupby(pd.Grouper(key='Date', freq='M')).agg(
月平均收盤價 = ('Close', 'mean'),
月總成交量 = ('Volume', 'sum')
).reset_index()
# 建立月份起始日,方便畫圖
monthly['MonthStart'] = monthly['Date'].dt.to_period('M').dt.to_timestamp()
plot_monthly_stats = monthly
這樣我們就得到一個新的 plot_monthly_stats,裡面有:
MonthStart:代表月份的日期(該月第一天)
月平均收盤價:當月所有收盤價的平均
月總成交量:當月的成交量加總
接下來進入今天的重點:繪製折線圖,我們使用 matplotlib,來畫分月平均收盤價折線圖。
程式碼 (上子圖折線部分)
ax1.plot(plot_monthly_stats['MonthStart'],
plot_monthly_stats['月平均收盤價'],
marker='o', linestyle='-', color='blue')
ax1.set_title('台積電 (2330) 月平均股價與月總成交量趨勢', fontsize=16)
ax1.set_ylabel('月平均收盤價', fontsize=12)
ax1.grid(True)
說明
fig, (ax1) = plt.subplots(
2, 1,
figsize=(12, 8),
sharex=True,
gridspec_kw={'height_ratios': [2, 1]}
)
# 月平均收盤價
ax1.plot(plot_monthly_stats['MonthStart'],
plot_monthly_stats['月平均收盤價'],
marker='o', linestyle='-', color='blue')
ax1.set_title('台積電 (2330) 月平均股價與月總成交量趨勢', fontsize=16)
ax1.set_ylabel('月平均收盤價', fontsize=12)
ax1.grid(True)
plt.xticks(rotation=45) # X 軸標籤傾斜,避免重疊
plt.tight_layout()
plt.show()
這樣就能看到「價格趨勢」,是一個常見的財經圖表格式。
到這裡,我們已經能畫出完整的「月平均股價趨勢圖」,未來還可以加上移動平均線、標註最高/最低點等功能,讓圖表更有分析價值。
那今天就先這樣。