绘制带有时间戳的直方图

问题描述 投票:0回答:2

我有以下格式的 pandas 时间戳列表:

[Timestamp('2022-01-01 21:00:00'), 
 Timestamp('2022-01-02 21:15:00'), 
 Timestamp('2022-01-03 21:00:00'), 
 Timestamp('2022-01-04 20:00:00'), 
 Timestamp('2022-01-05 21:00:00'),
 ....
 ]

现在我想做的基本上是查看一天中的时间并绘制一个直方图,表示这些邮票在

21:00
21:15
等位置的百分比。我知道我可以提取
hour
 minute
来自时间戳,但无法弄清楚如何绘制直方图,其中标签是小时和分钟,条形代表百分比。

所以,我的尝试如下:

labels, counts = np.unique(histogram, return_counts=True)

all_sum = sum(counts)
percentages = [i * 100 / all_sum for i in counts]

bars = plt.bar(labels, counts, align="center", width=13, color="blue", edgecolor="black")

for i, p in enumerate(bars):
    width = p.get_width()
    height = p.get_height()
    x, y = p.get_xy()
    print(x, y)
    plt.text(x + width / 2, y + height * 1.01, "{0:.2f}".format(percentages[i]) + "%", ha="center", weight="bold")

plt.gca().set_xticks(labels)
plt.grid(False)
plt.tight_layout()

plt.show()

但是,这会产生如下图:

enter image description here

不知道为什么这些条重叠...

python pandas matplotlib
2个回答
1
投票

从日期时间生成适当格式的字符串,按字符串分组,计数并利用 pandas 绘图方法:

import pandas as pd
import matplotlib.ticker as mtick
import matplotlib.pyplot as plt


datetimes = [('2022-01-01 21:00:00'), 
             ('2022-01-02 21:15:00'), 
             ('2022-01-03 21:00:00'), 
             ('2022-01-04 20:00:00'), 
             ('2022-01-05 21:00:00'),]
df = pd.DataFrame({"datetime": pd.to_datetime(datetimes)})

fig, ax = plt.subplots(1, 1)
((df.groupby(df.datetime.dt.strftime("%H:%M")).size() / len(df) * 100)
   .plot.bar(ax=ax))

ax.yaxis.set_major_formatter(mtick.PercentFormatter())
ax.grid(False)

enter image description here


0
投票

Nu Html 检查器 该工具是一个正在进行的更好的 HTML 检查实验,其行为仍然可能会发生变化

显示结果 https://developer.mescius.com/blogs/rss-feeds 检查器输入 显示源大纲图像报告

检查方式 地址 https://developer.mescius.com/blogs/rss-feeds

警告:没有看到字符集参数的 text/* 类型。根据 RFC 3023 第 3.1 节,默认为 US-ASCII。

https://developer.mescius.com/blogs/rss-feeds

警告:外部编码信息指定 US-ASCII,但 XML 声明指定 UTF-8。根据 RFC 3023 允许外部覆盖。当与外部字符编码信息解耦时,本文档的格式良好状态可能会发生变化。

第 1 行第 36 列

编码=“UTF-8”?>↩

架构错误:XML 文档没有命名空间;无法确定用于验证的任何模式。

https://developer.mescius.com/blogs/rss-feeds

由于非文档错误,无法确定结果。

总执行时间603毫秒。

关于此检查器 • 报告问题 • 版本:24.10.31

© www.soinside.com 2019 - 2024. All rights reserved.