Python讀取excel數據且橫軸是日期的圖像繪製

Python的matplotlib包含很多圖表函數,其中plot()函數是繪製座標圖的。

通常情況下,橫軸和縱軸都是數值型數據很好畫圖,直接帶入數據,座標軸會自動調節大小和顯示密度。但是當橫軸是日期時,且從excel文件讀取數據時,有一點麻煩。

遇到的問題:

1. 首先,excel裏的日期顯示不正常。

2. 橫軸日期的顯示不理想,或太密集或太鬆弛。

解決:

1. 方法一:修改excel數據類型

excel裏的日期型數據,用python讀取出來是這樣的:

座標軸的顯示肯定也是有問題的。

該方法就是修改excel數據類型。將日期類型數據修改爲文本類型,一定要在數據前面加單引號,這樣讀取出來的數據纔會是str類型:

完整代碼:

import matplotlib as mpl
import matplotlib.pyplot as plt
import datetime
import matplotlib.dates as mdates
from xlrd import open_workbook
from pylab import *
mpl.rcParams['font.sans-serif'] = ['SimHei'] #解決中文不顯示問題

#定義橫軸和縱軸數據列表
x_data=[]
y_data=[]

#打開excel文件
wb = open_workbook('data.xlsx')

#讀取excel數據,並放入列表中
for s in wb.sheets():
    for row in range(s.nrows): #讀取表裏的每行index
        #print('the row is:',row)
        values = [] #每一行循環前都初始化values爲空,所以values只是一行的值,並不包含所有行列
        for col in range(s.ncols): #讀取該行中的每列index
            values.append(s.cell(row,col).value) #將該行中每列數據加入values列表
        x_data.append(values[2]) 
        y_data.append(values[3])

#Excel表格裏的數據必須是str類型,將str類型轉換爲date類型。該方法畫出的圖橫座標不是等間距的,日期一般取整顯示,如10.31日就會顯示11.01日
xs = [datetime.datetime.strptime(d, '%Y-%m-%d').date() for d in x_data]
plt.plot_date(xs, y_data, linestyle = '-', marker = ',')

#設置標註信息
plt.title(u"每日數據量") #圖片頂部名稱
plt.xlabel("日期")  #橫座標名稱
plt.ylabel("數據") #縱座標名稱
plt.gcf().autofmt_xdate()  #自動旋轉日期標記

plt.show()

 圖像結果:

可以看出,該方法畫出的圖橫座標不是等間距的,日期一般取整顯示,如10.31日就會顯示11.01日

2. 方法二:修改python代碼

python讀取excel的日期型數據默認顯示不正常,在代碼裏進行轉換。

利用該語句強制轉換爲日期形式:

plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))

完整代碼:

import matplotlib as mpl
import matplotlib.pyplot as plt
import datetime
import matplotlib.dates as mdates
from xlrd import open_workbook
from pylab import *
mpl.rcParams['font.sans-serif'] = ['SimHei'] #解決中文不顯示問題

#定義橫軸和縱軸數據列表
x_data=[]
y_data=[]

#打開excel文件
wb = open_workbook('data.xlsx')

#讀取excel數據,並放入列表中
for s in wb.sheets():
    for row in range(s.nrows): #讀取表裏的每行index
        #print('the row is:',row)
        values = [] #每一行循環前都初始化values爲空,所以values只是一行的值,並不包含所有行列
        for col in range(s.ncols): #讀取該行中的每列index
            values.append(s.cell(row,col).value) #將該行中每列數據加入values列表
        x_data.append(values[2]) 
        y_data.append(values[3])

#Excel表格裏的數據是日期類型,將日期格式化
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
plt.gca().xaxis.set_major_locator(matplotlib.ticker.MultipleLocator(10))  #設置橫座標的間隔,每隔幾個數據顯示
plt.plot(x_data, y_data)

#設置標註信息
plt.title(u"每日數據量") #圖片頂部名稱
plt.xlabel("日期")  #橫座標名稱
plt.ylabel("數據") #縱座標名稱
plt.gcf().autofmt_xdate()  #自動旋轉日期標記

plt.show()

並且該語句可以設置橫軸顯示密度,表示每個幾個數據顯示

plt.gca().xaxis.set_major_locator(matplotlib.ticker.MultipleLocator(10))

圖像結果:

只是結果有個問題:日期顯示不正常,本來應該是2020年的,現在都是0121年,不知道爲什麼,沒有查出問題所在,希望知道的朋友告訴一下。

excel數據:

數據大概是這樣的:第0列是日期型,第2列是文本str型。

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章