python-3.x - 在 Plotly 中向甘特图添加自定义标记
问题描述
我是 plotly 的新手,我正在使用 px.timeline 创建甘特图。我的数据集中有 3 类数据,一个有开始和结束时间的普通任务,以及两种开始和结束时间相同的任务。我希望正常任务是一个矩形(这就是它的绘制方式),而其他两个任务有一个沙漏标记和一个三角形标记,而不是一条非常细的线?
这就是我的数据的样子:
data = [dict(Task=’’, start=’’, end=’’, shape=’<rect, hour, tri>’)]
样本数据 :
df = [dict(Task="Job A", Start='2009-01-01', Finish='2009-01-01', shape='hourglass'),
dict(Task="Job B", Start='2009-03-05', Finish='2009-04-15', shape='rectangle'),
dict(Task="Job C", Start='2009-05-30', Finish='2009-05-30', shape='triangle')]
代码 :
fig = px.timeline(data, x_start="Start", x_end="Finish", y="Task")
fig.update_yaxes(autorange="reversed", ticklabelposition="outside left")
fig.update_layout(showlegend=False, height=2000, width=1255, margin_pad=10)
fig.show()
例子:
有什么办法可以做到这一点?
谢谢 !
解决方案
经过几个小时的搜索,我解决了这个问题。
将数据分成三个,每个对应于 3 个不同的形状,然后绘制和组合。
创建 3 个单独的图:
rect = px.timeline(rect, x_start="Start", x_end="Finish", y="Task", color="color")
dia = px.scatter(dia, x="Start", y="Task", color="color", symbol_sequence=['diamond'])
coll = px.scatter(coll, x="Start", y="Task", color="color", symbol_sequence=['hourglass'])
如果需要,更新各个图的跟踪:
rect.update_traces(marker=dict(line=dict(width=1, color='black')))
dia.update_traces(marker=dict(size=12, line=dict(width=2)))
coll.update_traces(marker=dict(size=12, line=dict(width=2)))
设置时间线图的轴:
rect.update_xaxes(tickformat="%H:%M:%S.%L", tickmode='linear', dtick='120000')
rect.update_yaxes(autorange='reversed')
rect.update_layout(title=title, showlegend=False, height=2800, width=2000)
覆盖所有图:
new_fig = go.Figure(data=rect.data + dia.data + coll.data, layout=rect.layout)
new_fig.show()
推荐阅读
- java - Springboot,如何在启动时以编程方式显示横幅,再次
- php - 使用可调用参数修改查询
- javascript - 无法删除特定标记。错误:未捕获类型错误:无法读取未定义的属性“setMap”
- ios - UITableviewCell 在动态设置高度为零时卡住滚动
- ios - 如何在谷歌地图中使用 url 和参数在起点和终点之间制作路线?
- swift - ios swift FBSDKShareKit 在没有 ShareDialog 视图控制器的情况下发布(共享)内容
- javascript - Javascript 中的模块化
- python - Python中具有无序索引的多维数组
- android - 如何在 Native 代码中访问 SQLite 数据库?
- javascript - JavaScript 从音频中解析元数据 (ICY)