python - 带有整数 xaxis 的甘特图的 Plotly Express 时间线?
问题描述
我正在使用 plotly express 时间线在此示例之后生成甘特图:https ://medium.com/dev-genius/gantt-charts-in-python-with-plotly-e7213f932f1e
它会自动将 x 轴设置为使用日期,但我实际上只想使用整数(即 Project Kick-Off +1、Project Kick-Off +6 等)。
有没有办法让时间线图不使用 xaxis 的日期?
如果我尝试使用整数,它会将它们视为毫秒。
解决方案
答案:
是的,有可能!只需将整数作为开始和结束“日期”,计算它们之间的差异 ( delta
),然后对您的 进行以下更改fig
:
fig.layout.xaxis.type = 'linear'
fig.data[0].x = df.delta.tolist()
阴谋
细节:
实际上有一种方法可以实现这一点,尽管文档指出:
px.timeline 函数默认将 X 轴设置为 type=date,因此可以像任何时间序列图一样进行配置。
因此,其中的所有其他功能px.timeline()
似乎都围绕着这一事实。但是,如果您只是忽略这一点并使用整数作为Start
and的值Finish
,那么您可以调整一些属性以获得您想要的。您只需要计算每个Start
和之间的差异Stop
。例如像这样:
df = pd.DataFrame([
dict(Task="Job A", Start=1, Finish=4),
dict(Task="Job B", Start=2, Finish=6),
dict(Task="Job C", Start=3, Finish=10)
])
df['delta'] = df['Finish'] - df['Start']
然后进一步调整:
fig.layout.xaxis.type = 'linear'
fig.data[0].x = df.delta.tolist()
完整代码:
import plotly.express as px
import pandas as pd
df = pd.DataFrame([
dict(Task="Job A", Start=1, Finish=4),
dict(Task="Job B", Start=2, Finish=6),
dict(Task="Job C", Start=3, Finish=10)
])
df['delta'] = df['Finish'] - df['Start']
fig = px.timeline(df, x_start="Start", x_end="Finish", y="Task")
fig.update_yaxes(autorange="reversed")
fig.layout.xaxis.type = 'linear'
fig.data[0].x = df.delta.tolist()
f = fig.full_figure_for_development(warn=False)
fig.show()
推荐阅读
- ios - 地理定位不适用于我的反应原生 iOS 模拟器
- windows - Windows - 查找前缀为 10 个随机字符的所有文件,后跟 images.aspx
- excel - 使用 pd.read_excel 指定要从 excel 中读取的行
- javascript - 禁用对文本区域或按键输入的焦点的最佳方法是什么?
- .net - 需要将 key=value 文本列表转换为 dot net core 中的 JSON 流
- python - 不支持嵌套重命名器,如何重建此代码?
- python-3.x - 从 sqlite 检索图像并添加到列表框 tkinter python
- linux-kernel - 从内核调用 local_irq_disable() 也会禁用用户空间中的本地中断?
- javascript - 有什么方法可以在源代码中显示动态标签?
- android - 如何为约束布局组提供垂直边距?