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 *
#定义横轴和纵轴数据列表
x_data=[]
y_data=[]
#打开excel⽂件
wb = open_workbook('data.xlsx')
#读取excel数据,并放⼊列表中
for s in wb.sheets():
for row in ws): #读取表⾥的每⾏index
#print('the row is:',row)
values = [] #每⼀⾏循环前都初始化values为空,所以values只是⼀⾏的值,并不包含所有⾏列
for col in ls): #读取该⾏中的每列index
values.ll(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.show()
图像结果:
可以看出,该⽅法画出的图横坐标不是等间距的,⽇期⼀般取整显⽰,如10.31⽇就会显⽰11.01⽇
2. ⽅法⼆:修改python代码
python读取excel的⽇期型数据默认显⽰不正常,在代码⾥进⾏转换。
利⽤该语句强制转换为⽇期形式:
完整代码:
import matplotlib as mpl
import matplotlib.pyplot as plt
import datetime
import matplotlib.dates as mdates
from xlrd import open_workbook
from pylab import *
python怎么读入excel
#定义横轴和纵轴数据列表
x_data=[]
y_data=[]
#打开excel⽂件
wb = open_workbook('data.xlsx')
#读取excel数据,并放⼊列表中
for s in wb.sheets():
for row in ws): #读取表⾥的每⾏index
#print('the row is:',row)
values = [] #每⼀⾏循环前都初始化values为空,所以values只是⼀⾏的值,并不包含所有⾏列
for col in ls): #读取该⾏中的每列index
values.ll(row,col).value) #将该⾏中每列数据加⼊values列表
x_data.append(values[2])
y_data.append(values[3])
#Excel表格⾥的数据是⽇期类型,将⽇期格式化
#设置标注信息
plt.title(u"每⽇数据量") #图⽚顶部名称
plt.xlabel("⽇期") #横坐标名称
plt.ylabel("数据") #纵坐标名称
plt.show()
并且该语句可以设置横轴显⽰密度,表⽰每个⼏个数据显⽰
图像结果:
只是结果有个问题:⽇期显⽰不正常,本来应该是2020年的,现在都是0121年,不知道为什么,没有查出问题所在,希望知道的朋友告诉⼀下。
excel数据:
数据⼤概是这样的:第0列是⽇期型,第2列是⽂本str型。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论