如何使用Plotly基于时间步而非日期绘制甘特图
问题:Plotly是否支持基于时间步(非日期时间)的甘特图绘制?
我在网上找到一段可生成甘特图的代码(如下):
import plotly.express as px import pandas as pd df = pd.DataFrame([ dict(Task="Job A", Start='2009-01-01', Finish='2009-02-28', Resource="Alex"), dict(Task="Job B", Start='2009-03-05', Finish='2009-04-15', Resource="Alex"), dict(Task="Job C", Start='2009-02-20', Finish='2009-05-30', Resource="Max") ]) fig = px.timeline(df, x_start="Start", x_end="Finish", y="Task", color="Resource") fig.update_yaxes(autorange="reversed") fig.show()
但我希望不使用日期时间,而是采用从0开始的时间步来绘制,预期代码如下:
import plotly.express as px import pandas as pd df = pd.DataFrame([ dict(Task="Job A", Start=0, Finish=10, Resource="Alex"), dict(Task="Job B", Start=12, Finish=24, Resource="Alex"), dict(Task="Job C", Start=5, Finish=20, Resource="Max") ]) fig = px.timeline(df, x_start="Start", x_end="Finish", y="Task", color="Resource") fig.update_yaxes(autorange="reversed") fig.show()
请问Plotly是否支持这种基于时间步的甘特图绘制?我偏好Plotly的简洁图表样式,但查阅其官方文档后未找到相关转换方法。
回答
Plotly的px.timeline默认针对日期时间类型数据设计,但可以通过强制修改x轴类型实现基于数值时间步的甘特图绘制,无需转换数据格式。
只需在你的预期代码中添加一行配置,将x轴设置为线性数值类型:
import plotly.express as px import pandas as pd df = pd.DataFrame([ dict(Task="Job A", Start=0, Finish=10, Resource="Alex"), dict(Task="Job B", Start=12, Finish=24, Resource="Alex"), dict(Task="Job C", Start=5, Finish=20, Resource="Max") ]) fig = px.timeline(df, x_start="Start", x_end="Finish", y="Task", color="Resource") fig.update_yaxes(autorange="reversed") # 强制将x轴设置为数值线性类型 fig.update_xaxes(type='linear') fig.show()
这样修改后,x轴会直接以你设置的数值时间步展示,完全匹配需求。原因是px.timeline会自动把输入的数值识别为时间戳并转换为日期轴,通过手动指定x轴为线性类型,就能覆盖默认的日期解析逻辑,保留原始数值维度。
内容的提问来源于stack exchange,提问作者GuiGui
相关产品推荐
相关产品推荐

