I hope to create a visual (subplots) with a px.timeline
chart and go.Table
, basically put the two figures on the same page and generate a html file. Here is the sample data & unfinished code:
from plotly.subplots import make_subplots
import pandas as pd
import plotly.express as px
import plotly.graph_objs as go
df = pd.DataFrame({'Task': ['a1', 'a2', 'a3', 'a4', 'a5', 'a6'],
'Source': ['abc', 'completed', 'cancelled', 'deg', 'pki', 'API'],
'Start': ['2021-01-01', '2021-02-12', '2021-03-15', '2021-08-09', '2021-09-20', '2021-12-15'],
'Finish': ['2021-03-12', '2021-04-25', '2021-05-20', '2021-10-01', '2021-12-30', '2022-03-01']})
fig1 = px.timeline(df, x_start='Start', x_end='Finish')
fig2 = go.Figure(data=[go.Table(
header=dict(
values=['Task', 'Source', 'Start', 'Finish'],
line_color='white', fill_color='white'
),
cells=dict(
values=[df['Task'], df['Source'], df['Start'], df['Finish']],
align='center'
)
)])
Unfortunately right now I only can generate the two charts separately, could you help put the two on the same subplot please?
many thanks
Create a subplot using only the timeline data; the second sets the table graph. Finally, change the first x-axis to a date type.
from plotly.subplots import make_subplots
import pandas as pd
import plotly.express as px
import plotly.graph_objs as go
df = pd.DataFrame({'Task': ['a1', 'a2', 'a3', 'a4', 'a5', 'a6'],
'Source': ['abc', 'completed', 'cancelled', 'deg', 'pki', 'API'],
'Start': ['2021-01-01', '2021-02-12', '2021-03-15', '2021-08-09', '2021-09-20', '2021-12-15'],
'Finish': ['2021-03-12', '2021-04-25', '2021-05-20', '2021-10-01', '2021-12-30', '2022-03-01']})
fig = make_subplots(rows=2, cols=1,
specs=[[{'type': 'bar'}],
[{'type': 'table'}]],
subplot_titles=('Time lines', 'Table'),
row_heights=[0.55, 0.45],
vertical_spacing=0.1)
fig1 = px.timeline(df, x_start='Start', x_end='Finish', y='Task')
fig.add_trace(go.Bar(fig1.data[0]), row=1,col=1)
fig.add_trace(go.Table(
header=dict(
values=['Task', 'Source', 'Start', 'Finish'],
line_color='white', fill_color='white'
),
cells=dict(
values=[df['Task'], df['Source'], df['Start'], df['Finish']],
align='center'
)
), row=2, col=1)
fig.update_layout(autosize=True,
height=600
)
fig.update_xaxes(type='date')