【问题标题】:How to show 'hour precision' on datetimes in Plotly express?如何在 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

标签: python plotly plotly-express


【解决方案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 文本
猜你喜欢
  • 1970-01-01
  • 2020-08-11
  • 2020-07-30
  • 1970-01-01
  • 2019-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多