【matplotlib】解決ax.plot x軸密度(間隔)自動調整問題一勞永逸的方法:ax自動調整x軸密度

一、前言

在使用matplotlib或是df.bar畫圖時常常出現時間軸(x軸)過度密集的問題嗎?

一下這台電腦可以沒問題,換電腦又遇到,這邊教你一個兩行程式碼一勞永逸的方法。

(有基礎的人可以直接滑到最下面看完整程式碼,看不懂再回頭看解釋)

還不知道怎麼學python或基礎不穩的可以看:Python學習地圖總覽:課程分類 專案分類 問題解決

image

 

二、解決辦法

首先匯入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))

image

完整程式碼

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或基礎不穩的可以看:

Python學習地圖總覽:課程分類 專案分類 問題解決

如果遇到中文無法顯示在ax子圖上的可以看:

【matplotlib】解決df.plot及plt沒辦法顯示中文字問題

 

想要即時訂閱最新文章:

https://forms.gle/MdXmiF2HgHhNChL46

或者訂閱Telegram來接收最新資訊:

https://t.me/joinchat/VUUuDt67Uq5l6CIQ

arrow
arrow

    恩哥Python 發表在 痞客邦 留言(0) 人氣()