Это как решение без groupby
. Но вы можете найти что-то полезное из этого.
Код:
# import all the necessaries libraries
from plotly import tools
import plotly.offline as py
import plotly.graph_objs as go
import pandas as pd
# your data
d = {'day':['Mon','Mon','Mon','Mon','Tues','Tues','Tues','Tues'],
'sample':['A','A','B','B','A','A','B','B'],
'idNum':[1,2,1,2,1,2,1,2],
'values':[1.3,1.4,1.25,1.0,1.87,1.11,1.9,0.8]}
# create a df
df = pd.DataFrame(data=d)
# create traces
trace1 = go.Scatter(
x=df.loc[(df['sample']=='A') & (df['idNum']==1)]['day'],
y=df.loc[(df['sample']=='A') & (df['idNum']==1)]['values'],
line = dict(color=('blue')),
legendgroup='first',
name='1'
)
trace2 = go.Scatter(
x=df.loc[(df['sample']=='A') & (df['idNum']==2)]['day'],
y=df.loc[(df['sample']=='A') & (df['idNum']==2)]['values'],
line = dict(color=('red')),
legendgroup='second',
name='B1',
showlegend=False
)
trace3 = go.Scatter(
x=df.loc[(df['sample']=='B') & (df['idNum']==1)]['day'],
y=df.loc[(df['sample']=='B') & (df['idNum']==1)]['values'],
line = dict(color=('blue')),
legendgroup='first',
name='A2',
showlegend=False
)
trace4 = go.Scatter(
x=df.loc[(df['sample']=='B') & (df['idNum']==2)]['day'],
y=df.loc[(df['sample']=='B') & (df['idNum']==2)]['values'],
line = dict(color=('red')),
legendgroup='second',
name='2'
)
# told plotly, how much subplots we want
fig = tools.make_subplots(rows=2, cols=1)
# add to each subplot trace
fig.append_trace(trace1, 1, 1)
fig.append_trace(trace2, 1, 1)
fig.append_trace(trace3, 2, 1)
fig.append_trace(trace4, 2, 1)
# customize layout
fig['layout']['yaxis1'].update(title='values',
tickvals=[0.6,0.8,1.0,1.2,1.4,1.6,1.8,2.0], range=[0.6,2.0],
showgrid=False,showline=True,zeroline=True)
fig['layout']['xaxis1'].update(title='days',
showgrid=False,showline=True,zeroline=True)
fig['layout']['yaxis2'].update(title='values',
tickvals=[0.6,0.8,1.0,1.2,1.4,1.6,1.8,2.0], range=[0.6,2.0],
showgrid=False,showline=True,zeroline=True)
fig['layout']['xaxis2'].update(title='days',
showgrid=False,showline=True,zeroline=True)
# set height and width for a plot
fig['layout'].update(height=600, width=400, title='<b>values vs. day</b>')
# plot a plot
py.plot(fig, filename='stacked-subplots')
Выход:
Я не могу создать только две трассы, потому что у вас есть похожие данные на каждом графике. Подробнее о том, как создавать сюжеты в сюжете, вы можете проверить здесь . Надеюсь, это помогло вам