【问题标题】:Plot time without date in matplotlib or seaborn在 matplotlib 或 seaborn 中绘制没有日期的时间
【发布时间】:2018-09-12 09:05:19
【问题描述】:

您好,我正在处理分类数据。我想查看特定日期的设备行为。我有这些作为我的数据框:

toronto_time,我有一个datetime64[D]。我之前使用dt.time 删除日期。但是,它提出了一个数据类型问题,使其成为object 而不是datetime64[D]。使用pd.to_datetime 再次转换它会在其自身上添加一个日期。

所以我把它留在原来的地方:

       toronto_time             description
0      2018-09-08 00:00:50      STATS
1      2018-09-08 00:01:55      STATS
2      2018-09-08 00:02:18      DEV_OL
3      2018-09-08 00:05:24      STATS
4      2018-09-08 00:05:34      STATS
5      2018-09-08 00:06:33      CMD_ERROR

我尝试用 seaborn 用这些代码绘制它:

import matplotlib.pyplot as plt
import matplotlib.dates as md
import seaborn as sns

plt.style.use('seaborn-colorblind')
plt.figure(figsize=(8,6))
sns.swarmplot('toronto_time', 'description', data=df);
plt.show()

但是,可视化在当天被压缩。我想删除 xlabel 中的日期,也根据小时(0:00 到 24:00)拉伸它们

这是我得到的:

【问题讨论】:

  • 如果您像 df['toronto_time'] = df['toronto_time'].dt.hour 这样对数据框进行转换,它不会提供所需的输出吗?
  • 它只会停留在小时。类别将指向特定时间。
  • 恐怕我不太了解你......如果它没有产生你想要的输出,请查看我的答案并评论它

标签: python pandas matplotlib seaborn


【解决方案1】:

如果您的刻度仅在小时上,我不确定您为什么要在图表上显示分钟和秒?但是你可以通过为你的轴设置一个格式化程序来做到这一点。虽然如果您要按小时查找刻度,我建议您也更改轴​​限制。

import pandas as pd

import matplotlib.pyplot as plt
import matplotlib.dates as md
import seaborn as sns

df = pd.DataFrame({'toronto_time': ['2018-09-08 00:00:50',
                                    '2018-09-08 01:01:55',
                                    '2018-09-08 02:02:18',
                                    '2018-09-08 03:05:24',
                                    '2018-09-08 04:05:34',
                                    '2018-09-08 05:06:33'], 
                    'description': ['STATS', 'STATS', 'DEV_OL', 'STATS', 'STATS', 'CMD_ERROR']})
df['toronto_time'] = pd.to_datetime(df['toronto_time'], format='%Y-%m-%d %H:%M:%S')

plt.style.use('seaborn-colorblind')
fig, ax = plt.subplots(figsize=(8,6))
sns.swarmplot('toronto_time', 'description', data=df, ax=ax)
ax.set_xlim(df['toronto_time'].min()-pd.Timedelta(1,'h'),
            df['toronto_time'].max()+pd.Timedelta(1,'h'))
ax.xaxis.set_major_formatter(md.DateFormatter('%H:%M:%S'))

plt.show()

这是一个很好的例子,展示了如何使用定位器来定义刻度的间距:http://leancrew.com/all-this/2015/01/labeling-time-series/

【讨论】:

  • 不错!谢谢!虽然我的 xticks 显示 (0, 3, 6, 9, 12 ... 21:00, 0:00)。如何显示所有时间? (0:00 到 23:59 或 0)
  • 答案底部的链接中:试试ax.xaxis.set_major_locator(md.HoursLocator())
猜你喜欢
  • 2021-12-29
  • 1970-01-01
  • 2020-07-08
  • 2019-05-14
  • 2014-03-24
  • 2016-05-15
  • 2019-12-14
  • 1970-01-01
  • 2011-06-14
相关资源
最近更新 更多