如何在 Plotly express 中显示日期时间的“小时精度”?

Posted

技术标签:

【中文标题】如何在 Plotly express 中显示日期时间的“小时精度”?【英文标题】:How to show 'hour precision' on datetimes in Plotly express? 【发布时间】:2021-08-16 16:17:21 【问题描述】:

我在所有博客上查找的答案都是徒劳的......我只是在寻找一种在我的图表上以小时精度显示日期时间的方法。这是我的代码生成的示例:

我的“开始日期”和“结束日期”通常采用以下格式“mm-dd-yyyy H-M-S”,但在我放大之前它不会显示小时精度

我知道这个问题听起来很愚蠢,但如果你能指出我正确的方向,我将不胜感激

编辑:

【问题讨论】:

原始数据有时间数据吗?应该显示图表所基于的数据和代码。 确实,我的原始数据当然有时间。检查我在编辑中添加的照片,一旦我放大它们就会开始向我显示日期和时间......但是当我自动缩放以查看整个间隔时,即使它与长度或其他东西无关,它们也会开始从中剪裁时间 要按您想要的方式缩放 X 轴,您可以参考:plotly.com/python/tick-formatting/… 并获得您想要的确切格式,您可以参考:github.com/d3/d3-time-format/blob/master/README.md 【参考方案1】:

是设置xaxis_tickformat的情况。如果没有下面的示例,将按照您的描述运行,没有小时精度

import pandas as pd
import numpy as np
import plotly.express as px

# for hour slots randonly assign a task
df = pd.DataFrame("Start": pd.date_range("1-jan-2021", periods=10**3, freq="4H")).assign(
    End=lambda d: d.Start + pd.Timedelta(hours=1),
    Task=np.random.choice([f"Task i" for i in range(2)], 10**3, p=(0.8, 0.2)),
)

# compress consequetive rows
df = df.groupby(df.Task.ne(df.Task.shift()).cumsum()).agg(
    "Start": "min", "End": "max", "Task": "first")

fig = px.timeline(df, x_start="Start", x_end="End", y="Task", color="Task")

fig.update_layout(xaxis_tickformat = '%Y-%m-%d %H:%M')

只更改悬停模板而不是整个轴

fig = px.timeline(df, x_start="Start", x_end="End", y="Task", color="Task")
print(fig.data[0].hovertemplate) # just FYI so can see what default template is
fig.update_traces(hovertemplate="Task=%y<br>Start=%base|%Y-%m-%d %H:%M<br>End=%x|%Y-%m-%d %H:%M<extra></extra>")

【讨论】:

我非常感谢这样的回复。它简短、简单且具有建设性。非常感谢 Rob 抽出宝贵时间! 不禁注意到,您的方法对绘制的数据和 x 轴也应用了相同的格式。难道没有办法保持x轴完整并只修改数据格式吗?我尝试修改数据框(包含绘制的数据),但它是徒劳的 这实际上只是相同的技术...更新了如何更改 hover 文本

以上是关于如何在 Plotly express 中显示日期时间的“小时精度”?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用字典中的 plotly express 创建(条形)图?

Plotly:如何使用 plotly express 自定义 xaxis 刻度标签?

如何在 Python 中使用 Plotly Express 仅显示图例的子集(plotly.express,px)?

如何使用 Plotly Express 在 y 轴上显示每个值?

Plotly:如何使用 plotly express 在单迹散点图中显示图例?

Plotly-Express:如何在按列名设置颜色时修复颜色映射