• 横坐标日期等间隔绘图 python示例代码


    有两列数据,一列是日期,另一列是数值。日期是递增的,但是间隔不是均匀的。比如1月1日至2月1日有10组数据,2月1日至3月1日有100组数据,3月1日至4月1日有1000组数据。我想绘折线图,横坐标是日期,纵坐标是第二列数值。但是横坐标需要每月是等间隔。比如1月1日-2月1日和2月1日-3月1日是等间隔的。

    import matplotlib.pyplot as plt
    import matplotlib.dates as mdates
    import pandas as pd
    from datetime import datetime, timedelta
    import random
    import warnings
    warnings.simplefilter(action='ignore', category=FutureWarning)
    plt.rcParams['font.sans-serif'] = ['SimHei']  # 显示中文
    plt.rcParams['axes.unicode_minus'] = False  # 显示负号
    font = {'family': 'Times New Roman', 'size': '20', 'color': '0.5', 'weight': 'bold'}
    
    # 生成假的日期和数值数据
    dates = []
    values = []
    
    # 1月1日至2月1日有10组数据
    start_date = datetime(2022, 1, 1)
    end_date = datetime(2022, 2, 1)
    current_date = start_date
    while current_date < end_date:
        dates.append(current_date)
        values.append(random.randint(1, 100))
        current_date += timedelta(days=3)
    
    # 2月1日至3月1日有100组数据
    start_date = datetime(2022, 2, 1)
    end_date = datetime(2022, 3, 1)
    current_date = start_date
    while current_date < end_date:
        dates.append(current_date)
        values.append(random.randint(1, 100))
        current_date += timedelta(days=1)
    
    # 3月1日至4月1日有1000组数据
    start_date = datetime(2022, 3, 1)
    end_date = datetime(2022, 4, 1)
    current_date = start_date
    while current_date < end_date:
        dates.append(current_date)
        values.append(random.randint(1, 100))
        current_date += timedelta(hours=6)
    
    # 创建DataFrame
    df = pd.DataFrame({'date': dates, 'value': values})
    
    # 设置横坐标刻度为月份
    fig, ax = plt.subplots(figsize=[12,3])
    ax.xaxis.set_major_locator(mdates.MonthLocator())
    ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
    
    # 绘制折线图
    plt.plot(df['date'], df['value'])
    
    # 添加标题和标签
    plt.title('Line Plot of Values')
    plt.xlabel('Date')
    plt.ylabel('Value')
    
    
    # 添加趋势线
    x = mdates.date2num(df['date'])
    y = df['value']
    coefficients = np.polyfit(x, y, 1)
    polynomial = np.poly1d(coefficients)
    plt.plot(df['date'], polynomial(x), color='red', linestyle='--')
    
    # 添加标题和标签
    plt.title('Line Plot of Values with Trendline')
    plt.xlabel('Date')
    plt.ylabel('Value')
    plt.legend(['原始曲线', '趋势线'])
    
    # 显示图形
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74

    在这里插入图片描述

  • 相关阅读:
    陈宥维《虎鹤妖师录》“显眼包”太子成长记 表演灵动获好评
    配置文件和yaml语法
    java计算机毕业设计志愿者管理系统演示录像2020源码+mysql数据库+系统+lw文档+部署
    Programming Languages PartA Week3学习笔记——SML基本语法第二部分
    【PAT甲级 - C++题解】1063 Set Similarity
    vue的模板属性和渲染方法配置
    哪款电容笔在ipad上好用?便宜好用的电容笔推荐
    android audiotrack
    第八章作业
    C# 值类型调用ToString一定会装箱吗?
  • 原文地址:https://blog.csdn.net/m0_47410750/article/details/134037230