Rob*_*Rob 3 python plotly plotly-python plotly-express
我正在使用 plotly express 时间线来生成甘特图,如下所示:https ://medium.com/dev-genius/gantt-charts-in-python-with-plotly-e7213f932f1e
它会自动设置 x 轴以使用日期,但我实际上只想使用整数(即项目启动 +1、项目启动 +6 等)。
有没有办法让时间线图不使用 xaxis 的日期?
如果我尝试使用整数,它会将它们视为毫秒。
小智 8
我认为当我们必须指定时,这比上面的解决方案简单得多color
for d in fig.data:
filt = df['color'] == d.name
d.x = df[filt]['Delta'].tolist()
Run Code Online (Sandbox Code Playgroud)
是的,这是可能的!只需将整数作为开始和结束“日期”,计算它们之间的差异 ( delta
),并对您的 进行以下更改fig
:
fig.layout.xaxis.type = 'linear'
fig.data[0].x = df.delta.tolist()
Run Code Online (Sandbox Code Playgroud)
实际上有一种方法可以实现这一点,尽管文档指出:
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']
Run Code Online (Sandbox Code Playgroud)
然后进一步调整:
fig.layout.xaxis.type = 'linear'
fig.data[0].x = df.delta.tolist()
Run Code Online (Sandbox Code Playgroud)
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()
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1782 次 |
最近记录: |