我目前正在使用 Plotly,特别是使用 px.timeline 为不同的组创建水平时间线栏,并用不同的颜色代表其状态。目标是使用 make_subplots 垂直排列多个图形。单个条形图应如下所示:
import pandas as pd
import plotly.express as px
data = [
[True, '2016-11-28 00:06:00.000000', '2016-11-28 00:10:00.000000', 'Lamp'],
[False, '2016-11-28 00:10:00.000000', '2016-11-28 00:14:00.000000', 'Lamp'],
[True, '2016-11-28 00:14:00.000000', '2016-11-28 00:18:00.000000', 'Lamp']
]
columns = ['status', 'start', 'end', 'group']
df = pd.DataFrame(data, columns=columns)
df['start'] = pd.to_datetime(df['start'])
df['end'] = pd.to_datetime(df['end'])
fig = px.timeline(df, x_start='start', x_end='end', y="group", color="status")
fig.show()
当我使用 px.timeline 创建单独的图形,然后使用 make_subplots 将它们组合起来时,我的问题就开始了,每个子图中的条形图被分成多个条形图,而不是显示为每个组的单个水平条形图。子图如下所示:
from plotly.subplots import make_subplots
subfig = make_subplots(rows=2, cols=1)
fig = px.timeline(df, x_start='start', x_end='end', y="group", color="status", template="plotly")
fig2 = px.timeline(df, x_start='start', x_end='end', y="group", color="status", template="plotly")
subfig.add_traces(fig.data, rows=1, cols=1)
subfig.add_traces(fig2.data, rows=2, cols=1)
subfig.update_xaxes(type='date')
subfig.show()
预期的输出应该像第一张图片中那样,只有两次。我找不到使用 make_subplots 时子图被分割的解决方案。
到目前为止我已经尝试过
我将非常感谢使用plotly.express和make_subplots的解决方案,或者推荐其他可以实现这种形式的绘图的库。
您可以使用以下方法更新布局:
subfig.update_layout(barmode="overlay")