我有以下格式的 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()
但是,这会产生如下图:
不知道为什么这些条重叠...
从日期时间生成适当格式的字符串,按字符串分组,计数并利用 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)
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