Печать через несколько групп / столбцов - PullRequest
0 голосов
/ 16 января 2019

Я вытягиваю набор данных в форме ниже. У меня есть две переменные (sample и idNum), и я хочу нанести на обе группы. Я приложил то, что я хочу, чтобы вывод выглядел как сгенерированный в JMP. Я пробовал поворачивать и строить сюжеты на графике, но похоже, что вы не можете передать groupby в сюжеты.

Любой совет будет отличным.

# -*- coding: utf-8 -*-

from plotly import tools
from plotly.offline import  plot
import plotly.graph_objs as go
import pandas as pd
import numpy as np

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,1.87,1.11,1.9,0.8]}

df = pd.DataFrame(data=d)

pdata = [dict(type = 'scatter',
              x = df.day,
              y = df.values,
              mode = 'markers',
              transforms = [dict(type = 'groupby',
                                 groups =df.idNum)])]

plot({'data': pdata}, validate=False)

Желаемый выход

1 Ответ

0 голосов
/ 17 января 2019

Это как решение без 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')

Выход:

Something like what you want

Я не могу создать только две трассы, потому что у вас есть похожие данные на каждом графике. Подробнее о том, как создавать сюжеты в сюжете, вы можете проверить здесь . Надеюсь, это помогло вам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...