matplotlib/seaborn 中时间直方图中的轴刻度

2023-12-11

我有一个 df,其中包含来自 WhatsApp 聊天的消息、发件人以及日期时间格式的相应时间。

Time Sender Message
2020-12-21 22:23:00 Sender 1 "..."
2020-12-21 22:26:00 Sender 2 "..."
2020-12-21 22:35:00 Sender 1 "..."

我可以用以下方法绘制直方图sns.histplot(df["Time"], bins=48)

但现在 x 轴上的刻度没有多大意义。我最终得到了 30 个刻度,即使它应该是 24 个,而且这些刻度都包含整个日期加上我只想要“%H:%M”中的时间的时间

错误蜱虫的问题来自哪里?

Thanks!


seaborn 和 pandas 都使用 matplotlib 来绘制函数。让我们看看谁返回了 bin 值,我们需要调整 x-ticks:

import numpy as np
import pandas as pd
import seaborn as sns
from matplotlib import pyplot as plt

fig, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(15, 5))

#fake data generation
np.random.seed(1234)
n=20
start = pd.to_datetime("2020-11-15")
df = pd.DataFrame({"Time": pd.to_timedelta(np.random.rand(n), unit="D") + start, "A": np.random.randint(1, 100, n)})
#print(df)

#pandas histogram plotting function, left
pd_g = df["Time"].hist(bins=5, xrot=90, ax=ax1)
#no bin information
print(pd_g)
ax1.set_title("Pandas")

#seaborn histogram plotting, middle
sns_g = sns.histplot(df["Time"], bins=5, ax=ax2)
ax2.tick_params(axis="x", labelrotation=90)
#no bin information
print(sns_g)
ax2.set_title("Seaborn")

#matplotlib histogram, right
mpl_g = ax3.hist(df["Time"], bins=5, edgecolor="white")
ax3.tick_params(axis="x", labelrotation=90)
#hooray, bin information, alas in floats representing dates
print(mpl_g)
ax3.set_title("Matplotlib")


plt.tight_layout()
plt.show()

Sample output: ![enter image description here

从这个练习中我们可以得出结论,这三个都指的是同一个例程。因此,我们可以直接使用 matplotlib,它为我们提供了 bin 值:

import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
from matplotlib.dates import num2date

fig, ax = plt.subplots(figsize=(8, 5))

#fake data generation
np.random.seed(1234)
n=20
start = pd.to_datetime("2020-11-15")
df = pd.DataFrame({"Time": pd.to_timedelta(np.random.rand(n), unit="D") + start, "A": np.random.randint(1, 100, n)})

#plots histogram, returns counts, bin border values, and the bars themselves
h_vals, h_bins, h_bars = ax.hist(df["Time"], bins=5, edgecolor="white")

#plot x ticks at the place where the bin borders are
ax.set_xticks(h_bins)
#label them with dates in HH:MM format after conversion of the float values that matplotlib uses internally
ax.set_xticklabels([num2date(curr_bin).strftime("%H:%M") for curr_bin in h_bins])

plt.show()

Sample output: enter image description here

Seaborn 和 pandas 让生活变得更轻松,因为它们为常用的绘图函数提供了方便的包装器和一些附加功能。然而,如果它们提供的参数不够,人们通常不得不恢复到 matplotlib,它的功能更加灵活。显然,我不知道 pandas 或 seaborn 可能有更简单的方法。我很乐意在这些库中提出任何更好的建议。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

matplotlib/seaborn 中时间直方图中的轴刻度 的相关文章

随机推荐

  • Gtk 更改应用程序的字体和字体颜色

    我有一个 Gtk 和 C 应用程序 其中我想将字体设置为某种 XYZ 字体类型并将字体颜色设置为蓝色 对于应用程序中的所有标签和文本 我怎样才能一次性完成此操作 我已经开发了所有使用 Glade RAD 工具进行屏幕显示 目前我正在通过为每
  • 运行时代码生成和编译

    假设我有这段代码 它使用一些输入 例如 URL 路径 来通过反射来确定要运行的方法 init map put users viewUser map put users userIndex later String methodName ma
  • 如何让所有浏览器都支持 ?还有其他选择吗?

    我正在使用 HTML5 元素输入属性 只有 Google Chrome 支持日期 时间属性 我试过现代化但我无法理解如何将其集成到我的网站上 如何编码 语法 包含是什么 有关如何在所有浏览器中使用日期 时间属性的任何代码片段 任何不支持输入
  • #define 内的 #ifdef

    我想写这样的东西 define COV ON x ifdef COVERAGE TOOL Pragma COVERAGE x endif 有什么方法可以定义COV ON像这样 我知道我上面所做的事情是错误的 因为我不能这样做 ifdef在
  • 如何为位掩码创建 48 位 uint

    我正在尝试创建一个 48 位整数值 我知道可以使用字符数组或结构 但我希望能够进行位掩码 操作 并且我不确定如何做到这一点 目前该程序使用16位uint 我需要将其更改为48 它是一个字节码解释器 我想将内存寻址扩展到4GB 我可以只使用
  • Highcharts和表格数据的导出

    我已经搜索了一下 但无法找到关于如何将数据表与高图一起导出的明确解决方案 一篇 stackoverflow 帖子指着这个资源 现在不可用 有人成功地做到了这一点吗 请参考这篇文章 高图表链接 另请参阅Fiddle for code
  • 在您的应用程序中显示 iPhone 应用程序设置

    iPhone 支持一种定义应用程序设置的方法 以便它会在 设置 应用程序中自动创建 UI 我还想允许用户在应用程序内编辑应用程序设置 但最好重用自动创建的相同 UI See 应用程序设置 有没有办法让您的应用程序使用与 设置 应用程序相同的
  • 使用 xslt 的 CSV 到 XML - 如何具有递增的列名称

    我有这个 xslt 将 csv 转换为 xml 工作正常 除了所有列的标签都相同 我需要它像这样增加
  • ListView 并从项目中的子视图传播单击事件

    我有一个带有自定义项目的 ListView 3 个 ImageView 和一个 TextView 我有电话要打给setItemsCanFocus true 这样我就可以使 ImageViews 可点击 我目前正在使用 SimpleAdapt
  • 使用 PHP 截断浮点数

    当一个浮点数需要截断为浮点后的某个数字时 事实证明这并不容易做到 例如 如果必须截断到点后的第二位数字 则数字应该是 45 8976 gt 45 89 0 0185 gt 0 01 点后第二位数字不按点后第三位数字四舍五入 功能类似于rou
  • 如何判断一种颜色是否接近另一种颜色

    我正在创建一种颜色工具 该工具应该告诉我颜色是否接近另一种颜色 例如 Color colors new colors Color FromArgb 0 0 255 Color FromArgb 0 109 251 colors 0 IS B
  • href 链接中的 laravel 方法?

    我想创建一个带有两个链接的下拉菜单 删除 和 编辑 链接 对于删除功能 我创建了一个表单 Former horizontal open gt method DELETE gt action action Test TestControlle
  • 转换unix时间戳php

    我有一个数据库来存储我的时间 我使用 PHP 插入它 date Y m d H i s 然后我使用这个函数将其转换为 PHP 中的 unix 时间戳 function convert datetime str list date time
  • 线程 - wait()

    The wait 对象上的方法只能在同步上下文中调用 即当前线程必须拥有对象上的锁才能调用wait 方法 现在如果线程 T1 拥有对象上的锁 obj 并调用其 wait 方法obj wait 其他线程如何获得该对象的锁定 obj 这样他们也
  • 为什么Eclipse将maven运行时依赖变成编译依赖?

    我有一个 Maven 项目导入到 Eclipse Oxygen 中 Eclipse 报告没有编译问题 Alt F5 当我从命令行运行 Maven 时 我得到 ERROR home dean src TAP3UIs TAP3Desktop s
  • 我尝试在不同线程上使用 OpenGL 和 Windows API

    所以基本上我正在使用窗口 API创建一个空窗口 然后我使用OpenGL从不同的线程绘制到该窗口 我设法做到了这一点仅用一根线程 但是获取和分派系统消息以使窗口可用会减慢我能够获得的帧速率 因此我试图在主线程中绘制时让另一个线程并行执行此操作
  • 加号解码为空格

    我从 ios 和 android 发送请求到一些 PHP 服务器 并且 GET 请求中的一些参数被错误解码 request http myserver com path email john doe GET email john doe i
  • --no-ff merge 如何打破平分和指责?

    了解 Git 工作流程文章说 因此 您添加了一条新规则 当您合并功能分支时 请使用 no ff 强制进行新的提交 这样就完成了工作 然后你就可以移动了 在 然后有一天 您在生产中发现了一个严重的错误 并且您需要 追踪它的推出时间 你跑平分但
  • PHP:无法从 DOMDocument 中删除节点

    我无法从 DOMDocument 中删除节点 获取异常 My Code
  • matplotlib/seaborn 中时间直方图中的轴刻度

    我有一个 df 其中包含来自 WhatsApp 聊天的消息 发件人以及日期时间格式的相应时间 Time Sender Message 2020 12 21 22 23 00 Sender 1 2020 12 21 22 26 00 Send