美化时态数据的seaborn图

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

我正在尝试美化图表,以便更容易阅读和理解当前的数据。所讨论的数据是按下按钮时的时间序列数据。我想以图形方式表示数据,因为它可能会显示有关时间窗口内按下频率的详细信息。

我生成了一个图表,在某种程度上代表了我想要观察的内容,尽管考虑到数据量,很难阅读。

下面是我用来生成图表的代码和一些示例数据来显示结果,

date_list = ['2024/07/27, 22:00:34', '2024/07/27, 21:51:34', '2024/07/27, 21:29:00', '2024/07/27, 21:15:21', '2024/07/27, 21:07:55', '2024/07/28, 21:03:56', '2024/07/28, 20:36:41', '2024/07/28, 20:22:58', '2024/07/28, 20:09:17', '2024/07/28, 20:04:49', '2024/07/29, 20:02:07', '2024/07/29, 19:37:25', '2024/07/29, 17:51:23', '2024/07/29, 17:47:29', '2024/07/29, 17:00:28', '2024/07/30, 16:42:06', '2024/07/30, 16:11:29', '2024/07/30, 16:08:18', '2024/07/30, 15:50:38', '2024/07/30, 15:36:45', '2024/07/30, 15:23:23', '2024/07/31, 15:12:04', '2024/07/31, 15:08:42', '2024/07/31, 15:00:46', '2024/07/31, 14:41:30']

compare_date = datetime.date(1066, 1, 1)
compare_time = datetime.time(12, 00, 00)

dt_df = pd.DataFrame(data_list,columns=["bt_dates"])
dt_df["bt_dates"] = dt_df["bt_dates"].apply(lambda x: datetime.strptime(x, "%Y/%m/%d, %H:%M:%S"))

dt_df["time"] = dt_df["bt_dates"].apply(lambda x: datetime.combine(compare_date, x.time()))
dt_df["date"] = dt_df["bt_dates"].apply(lambda x: datetime.combine(x.date(), compare_time))

f, ax = pyplot.subplots()
(
   seaborn_objects.Plot(dt_df, x="time", y="date")
    .add(seaborn_objects.Dash(), seaborn_objects.Dodge(), orient="y")
    .scale(y=seaborn_objects.Temporal().tick(upto=100))
    .on(ax)
    .plot()
)
ax.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M', ))

enter image description here

下一步是根据是工作日还是周末将 y 轴上的日期更改为红色,并在人们睡着/醒着的几个小时内添加灰色区域。但这就是我迷失的地方,因为我刚刚开始使用 Seaborn 对象,而且我还没有完全理解它们。

如何使用seaborn对象改变y轴的颜色?

python plot seaborn
1个回答
0
投票

我已经解决了有关更改轴上文本颜色的问题。为此,需要提取轴刻度信息,然后遍历列表。下面的代码将更改文本的颜色。

date_list = ['2024/07/27, 22:00:34', '2024/07/27, 21:51:34', '2024/07/27, 21:29:00', '2024/07/27, 21:15:21', '2024/07/27, 21:07:55', '2024/07/28, 21:03:56', '2024/07/28, 20:36:41', '2024/07/28, 20:22:58', '2024/07/28, 20:09:17', '2024/07/28, 20:04:49', '2024/07/29, 20:02:07', '2024/07/29, 19:37:25', '2024/07/29, 17:51:23', '2024/07/29, 17:47:29', '2024/07/29, 17:00:28', '2024/07/30, 16:42:06', '2024/07/30, 16:11:29', '2024/07/30, 16:08:18', '2024/07/30, 15:50:38', '2024/07/30, 15:36:45', '2024/07/30, 15:23:23', '2024/07/31, 15:12:04', '2024/07/31, 15:08:42', '2024/07/31, 15:00:46', '2024/07/31, 14:41:30']

compare_date = datetime.date(1066, 1, 1)
compare_time = datetime.time(12, 00, 00)

dt_df = pd.DataFrame(data_list,columns=["bt_dates"])
dt_df["bt_dates"] = dt_df["bt_dates"].apply(lambda x: datetime.strptime(x, "%Y/%m/%d, %H:%M:%S"))

dt_df["time"] = dt_df["bt_dates"].apply(lambda x: datetime.combine(compare_date, x.time()))
dt_df["date"] = dt_df["bt_dates"].apply(lambda x: datetime.combine(x.date(), compare_time))

f, ax = pyplot.subplots()
(
   seaborn_objects.Plot(dt_df, x="time", y="date")
    .add(seaborn_objects.Dash(), seaborn_objects.Dodge(), orient="y")
    .scale(y=seaborn_objects.Temporal().tick(upto=100))
    .on(ax)
    .plot()
)
ax.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M', ))
for tick_label in ax.get_yticklabels():
    tick_date = datetime.strptime(tick_label.get_text(), "%Y-%m-%d")
    if tick_date.weekday() > 4:
        tick_label.set_color("red")

enter image description here

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