python 从CSV文件中读取数据并画日期折线图

python 从CSV文件中读取数据并画日期折线图

代码环境:python 3.7 + PyCharm 2019.1.1

问题描述:

用pandas.read_csv读取文件中的数据后,希望以第一列(时间)为横轴,以第五列(数字数据)为纵轴画出日期折线图。画图工具包使用matplotlib

遇到的问题及解决方法:

  1. 数据转换

    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 当前时区的名称
        %% %号本身
    
  2. 画图

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)

具体的函数参数就不写了

你可能感兴趣的:(python,csv)