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): #读取该行中的每列indexvalues.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): #读取该行中的每列indexvalues.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型。

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

  1. python读取excelsheet-一文看懂用Python读取Excel数据

    原标题:一文看懂用Python读取Excel数据 导读:现有的Excel分为两种格式:xls(Excel 97-2003)和xlsx(Excel 2007及以上). Python处理Excel文件主要 ...

  2. python将EXCEL数据导入数据库时日期型数据变成数字并加.0的问题一行代码解决方案方案

    [问题描述]:python将EXCEL数据导入数据库时日期变成文本型数据并显示为数字格式 [解决方案] 数据源: codes: #!/usr/bin/python3 -- coding: utf-8 ...

  3. python读取excel某一列内容-Python读取Excel数据并根据列名取值

    一直想将自己接触到的东西梳理一遍,可就是迈不出第一步,希望从这篇总结开始不要再做行动的矮人了. 最近测试过程中需要用到python读取excel用例数据,于是去了解和学习了下xlrd库,这里只记录使用 ...

  4. 一文看懂用Python读取Excel数据

    导读:现有的Excel分为两种格式:xls(Excel 97-2003)和xlsx(Excel 2007及以上). Python处理Excel文件主要是第三方模块库xlrd.xlwt.pyexcel- ...

  5. python读取xlsx python读取excel数据

    如题 python pandas读取excel数据 如何读取特定sheet的excel数据 1.安装pandas 已经有的可以不用再安装 >pip install pandas 2.读取数据 首 ...

  6. 用python读取excel数据、并作图_Python读取Excel表格,并同时画折线图和柱状图的方法...

    今日给大家分享一个Python读取Excel表格,同时采用表格中的数值画图柱状图和折线图,这里只需要几行代码便可以实. 首先我们需要安装一个Excel操作的库xlrd,这个很简单,在安装Python后 ...

  7. python读取excel数据使用pyecharts展示

    目录 一.场景 二.思路 三.代码 接上一博文读取[excel数据] 一.场景 场景:数据已经从excel读取完毕了,怎么展示呢 二.思路 思路:1.读取excel数据出来之后,那就是怎么去操作数据 ...

  8. python读取excel数据并实现数据相乘等其他运算

    利用python处理excel的数据:将其读取出来,并且最终实现数据相乘,打印出相乘的结果,其他的运算如加减都可以类比得出 实质在于,将其转化为一个列表,接着进行赋值 以下的代码很简单,相当于一个模板 ...

  9. Python 读取excel数据并填入excel,批量生成模板

    文章目录 一.问题-来源 二.问题-困难 三.问题-解决 总结 一.问题-来源 前几天,我姐遇见了一个难题:需要从excel表格中不断读取数据并生成个人信息模板 二.问题-困难 1.首先我想到了在wo ...

最新文章

  1. Python基础教程学习笔记:第一章 基础知识
  2. QtCreator集成开发环境编译调试VLC
  3. 全志 更换Update升级路径 Patch
  4. spring boot在运行测试类Error creating bean with name ‘serverEndpointExporter‘ defined...问题解决方案
  5. python是什么专业的研究生好考_明年考研,我的专业是电子信息工程,请问考什么学科研究生最合适?...
  6. 【RTOS】基于V7开发板的uCOS-III,uCOS-II,RTX4,RTX5,FreeRTOS原版和带CMSIS-RTOS V2封装层版全部集齐...
  7. 传统Web应用案例(采用服务端渲染)
  8. 信息学奥赛一本通 1094:与7无关的数 | OpenJudge NOI 1.5 39
  9. 第一次当项目经理压力大_项目经理不想被甩锅,你要这样做进度管理
  10. ArrayList 类方法toArray的一点疑惑
  11. 忘记mysql密码 重置密码
  12. 机器人工程师学习计划(计算机相关专业学习计划)
  13. android 录音机添加书签,带录音的书签的制作方法
  14. iOS 给文字添加删除线
  15. 用ESP8266连接 0.96寸 OLED屏幕
  16. 联想计算机BIOS启动顺序boot,联想电脑BIOS启动项如何设置U盘启动_联想电脑BIOS启动项设置U盘启动教程介绍...
  17. Android proguard 详解(一)
  18. 实时填报推送微信消息及审核(帆软报表)
  19. java继承1—上溯造型
  20. Android Gradle插件开发基础

热门文章

  1. 模拟电子技术-信号产生电路
  2. 求人贴:自动驾驶仿真软件研发、开发工程师
  3. Unity技术手册-UGUI零基础详细教程-Button按钮
  4. 过目不忘JS正则表达式
  5. 微信云开发使用教程,实现世界排行榜等功能
  6. 远翔升压FP5207B,外置MOS升压大功率,软启动可调,工作频率可调
  7. python反转一个整数、123变成321_python 反转整数
  8. 【JavaScript】使用XMLHttpRequest发送网络请求
  9. fckeditor使用(转)
  10. 2.css动画(空间转换,动画)