python - Python - Matplotlibs - 如何格式化并将间隔添加到具有日期和时间的 X 轴?
问题描述
我有如下所示的数据。该Date/Time
字段是%m-%d-%Y %H:%M:%S
格式。
Date/Time Utilization
04-01-2020 10:00:00 10
04-01-2020 10:10:00 20
04-01-2020 10:20:00 50
04-01-2020 10:30:00 10
04-02-2020 15:30:00 20
04-02-2020 15:40:00 10
04-02-2020 15:50:00 10
04-07-2020 23:40:00 40
04-07-2020 23:50:00 50
我想在 Matplotlib 中绘制它,x 轴作为日期/时间,y 轴作为利用率。
当我绘制这个时,这 10 分钟的间隔中的每一个都在 X 轴上被挤压在一起(下面的屏幕截图):
我上面的代码是这样的:
def plot_graph(utilization_map):
utilization_array = []
date_array = []
for each_time in utilization_map:
utilization = utilization_map[each_time]
utilization_array.append(utilization)
human_time = convert_epoch_to_datetime_for_plots(each_time) # This converts the epoch time in %m-%d-%Y %H:%M:%S format
date_array.append(human_time)
x_axis = date_array
y_axis = utilization_array
plt.plot(x_axis, y_axis, color='b')
plt.title("Utilization")
plt.xlabel("Days")
plt.ylabel("Percent of Utilization")
plt.legend()
plt.show()
问题:我想以 X 轴标签仅以%m-%d
或%m-%d-%Y
格式显示的方式绘制它,并且以每日间隔而不是 10 分钟显示,因此所有时间都不会在 X 轴上混合在一起。我该怎么做呢?
解决方案
- 用于
pandas.DataFrame.resample
组合从 10 分钟到每天的数据,然后绘制它。pd.DataFrame(df['util'].resample('D').sum())
进口
import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime
import numpy as np
创建可重现的数据框
dates = pd.date_range(start='2014-04-01', end='2020-04-07', freq='10min').tolist()
np.random.seed(0)
utilization = [np.random.randint(10, 50) for _ in range(len(dates))]
df = pd.DataFrame({'dates': dates, 'util': utilization})
df.set_index('dates', inplace=True)
util
dates
2014-04-01 00:00:00 26
2014-04-01 00:10:00 44
2014-04-01 00:20:00 36
2014-04-01 00:30:00 13
2014-04-01 00:40:00 41
2014-04-01 00:50:00 30
2014-04-01 01:00:00 21
2014-04-01 01:10:00 10
2014-04-01 01:20:00 25
2014-04-01 01:30:00 18
将数据帧重新采样为每日
df_daily = pd.DataFrame(df['util'].resample('D').sum())
util
dates
2014-04-01 4096
2014-04-02 4338
2014-04-03 4194
2014-04-04 4186
2014-04-05 4262
2014-04-06 4342
2014-04-07 4101
2014-04-08 4445
2014-04-09 4346
2014-04-10 4378
绘制数据框
fig = plt.figure(figsize=(10, 6))
ax = fig.add_subplot(111)
ax.plot(df_daily.index, df_daily['util'])
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m'))
plt.show()
- 此数据是随机的,
numpy
因此对于此示例,所有平均总和约为 4200。
推荐阅读
- css - 使显示不显示的 HTML 元素
- spring-boot - 安全性未从 Open API 生成器添加到 Swagger
- javascript - 可以在图表点上显示值
图表 - ReactJS - visual-studio-code - 按键插入某些运算符(字符行)
- html - 在同一行中对齐 div 而不使用浮点数和宽度
- laravel - 在 Laravel 中未处于调试模式时如何阻止某些路由?
- matlab - Matlab - 结合两个曲面图
- ajax - Ajax 调用 Symfony 控制器
- java - 如何在 jquery-inputpicker 中禁用下拉列表
- events - 代表、事件和相互关系