横坐标日期等间隔绘图 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')

# 显示图形
plt.show()

横坐标日期等间隔绘图 python示例代码_第1张图片

你可能感兴趣的:(python,开发语言)