【matplotlib】解決ax.plot x軸密度(間隔)自動調整問題一勞永逸的方法:ax自動調整x軸密度
一、前言
在使用matplotlib或是df.bar畫圖時常常出現時間軸(x軸)過度密集的問題嗎?
一下這台電腦可以沒問題,換電腦又遇到,這邊教你一個兩行程式碼一勞永逸的方法。
(有基礎的人可以直接滑到最下面看完整程式碼,看不懂再回頭看解釋)
還不知道怎麼學python或基礎不穩的可以看:Python學習地圖總覽:課程分類 專案分類 問題解決
二、解決辦法
首先匯入matplotlib套件中的ticker,他可以幫忙控制x與y軸的問題。
import matplotlib.ticker as mticker
而後我們使用df.index.size來查看df裡面的時間軸長度(數量),
這邊除以5你可以想像成分成幾等分,或是以tick_spacing的變數來決定一間距顯示一座標。
最後透過ax.xaxis.set_major_locator(mticker.MultipleLocator(tick_spacing))就可以設定x軸座標的密集度。
tick_spacing = df.index.size/5 # x軸密集度
ax.xaxis.set_major_locator(mticker.MultipleLocator(tick_spacing))
完整程式碼
import matplotlib.pyplot as plt from matplotlib.gridspec import GridSpec # 畫圖網格佈局 import pandas, numpy import pandas_datareader as web # 匯入Yahoo Finance套件 import matplotlib.ticker as mticker # 下載股價資料 df = web.DataReader(name='2330.TW', data_source='yahoo', start='2015-01-01', end='2020-12-31') #name為股票代號名稱 start、end為資料下載期間 # 開新一個畫布 fig = plt.figure(figsize=(10, 8)) # 寬10 長8 gs = GridSpec(1, 1) # 設立1x1的網格 # 設定網格及子圖 ax = plt.subplot(gs[0, 0]) # 子圖ax在網格的[0, 0] # 畫圖 ax.plot(df.index, df['Close']) ax.bar(df.index, df['Open']) # 圖調整 tick_spacing = df.index.size/5 # x軸密集度 ax.xaxis.set_major_locator(mticker.MultipleLocator(tick_spacing))
三、後記
大家matplotlib是一個非常好用的套件,但卻有很多眉眉角角,大家還有遇上什麼問題可以留言給我唷!
或是想看怎麼樣主題式的文章也歡迎留言給我,近期太忙了,所以挑大家比較會遇到的問題寫~
還不知道怎麼學python或基礎不穩的可以看:
如果遇到中文無法顯示在ax子圖上的可以看:
【matplotlib】解決df.plot及plt沒辦法顯示中文字問題
想要即時訂閱最新文章:
https://forms.gle/MdXmiF2HgHhNChL46
或者訂閱Telegram來接收最新資訊: