Python读取excel数据且横轴是日期的图像绘制

您所在的位置:网站首页 excel横坐标轴怎么改为年份 Python读取excel数据且横轴是日期的图像绘制

Python读取excel数据且横轴是日期的图像绘制

2023-10-14 07:11| 来源: 网络整理| 查看: 265

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型。

 

 

 

 

 

 

 

 

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3