代码环境:python 3.7 + PyCharm 2019.1.1
问题描述:
用pandas.read_csv读取文件中的数据后,希望以第一列(时间)为横轴,以第五列(数字数据)为纵轴画出日期折线图。画图工具包使用matplotlib
遇到的问题及解决方法:
DataFrame类型的数据不能直接作为matplotlib.pyplot.plot数据的参数,需要使用df.values转化
此外,本例中画图只需要日期数据,故使用time.strptime(string, format).date()函数提取数据中的日期部分。
用法说明:
函数作用:根据指定的格式把一个时间字符串解析为时间元组
参数:
string -- 时间字符串。
format -- 格式化字符串。
返回值:struct_time对象
子函数:date()保留日期部分
time()保留时间部分
补充:python中的日期时间格式化符号
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00-59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为 0,星期一为 1,以此类推。
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身
plt.plot画图
完整代码:
import matplotlib.pyplot as plt
from datetime import datetime
plt.rcParams['font.sans-serif'] = ['SimHei'] # 显示中文
plt.rcParams['axes.unicode_minus'] = False
def data_draw(data):
# 画图函数
time = [datetime.strptime(d, '%Y/%m/%d %H:%M').date() for d in data.values[:, 0]] # X轴数据
plt.figure(1)
plt.subplot(1, 1, 1)
plt.plot(time, data.values[:, 4], 'ro-', color='r', alpha=0.8, linewidth=1) # 数据的第五列作为Y轴数据
plt.xlabel('日期')
plt.ylabel('人数')
plt.gcf().autofmt_xdate() # 自动旋转日期标记
plt.show()
if __name__ == '__main__':
dataNews = pd.read_csv(datapath, encoding="utf_8_sig")
data_draw(dataNews)
具体的函数参数就不写了