Как редактировать фрейм данных pandas с помощью Plotly - PullRequest
0 голосов
/ 26 мая 2020

Прежде всего, я студент ChemE и только что изучал Python на прошлой неделе ..
Для проекта мне нужно показать мои данные в приложении. Вместо файла excel, содержащего 10K + строк, я хотел бы создать интерактивный график, используя plotly.

Данные выглядят следующим образом ( Excel )

Catalyst   | Temp | Response 1 | Response 2 | Response 3 
 _______________________________________________________ 
Catalyst a | 10| Response 1 | Response 2 | Response 3 
Catalyst a | 20| Response 1 | Response 2 | Response 3 
Catalyst a | 30| Response 1 | Response 2 | Response 3 
..................................................... 
Catalyst F | 10| Response 1 | Response 2 | Response 3
Catalyst F | 20| Response 1 | Response 2 | Response 3 
Catalyst F | 30| Response 1 | Response 2 | Response 3 

На графике вы выбираете Catalyst и желаемый ответ. Я выяснил, как я могу редактировать ответ для данного катализатора, используя этот код:

import plotly.graph_objects as go
from plotly.subplots import make_subplots
import pandas as pd

def graph(df,XXX):
    name = "Test_"+str(XXX)+".html"
    title = "Test of "+str(XXX)

    fig = make_subplots(specs=[[{"secondary_y": True}]])

    fig.add_trace(
            go.Scatter(x    = df.iloc[:,1],
                       y    = df.iloc[:,2]),
            secondary_y=False
            )

    fig.add_trace(
            go.Scatter(x    = df.iloc[:,1],
                       y    = df.iloc[:,3],
                       visible=True,),
            secondary_y=True
            )

    buttons1=[]
    buttons2=[]

    for dfk in df.keys():
        buttons1.append(dict(method='restyle',
                            label=dfk,
                            visible=True,
                            args=[{'y':[df[dfk].values],
                                   'name':dfk},[0]],
                            )
                      )
    for dfk in df.keys():
        buttons2.append(dict(method='restyle',
                            label=dfk,
                            visible=True,
                            args=[{'y':[df[dfk].values],
                                   'name':dfk},[1]],
                            )
                      )

    del buttons1[0:2] #Remove Cat & Temp key
    del buttons2[0:2]
    updatemenu=[]
    menu1=dict()
    updatemenu.append(menu1)
    menu2=dict()
    updatemenu.append(menu2)
    #updatemenu[1]
    updatemenu[0]['buttons']=buttons1
    updatemenu[0]['x']=0.17
    updatemenu[0]['y']=1.12
    updatemenu[1]['buttons']=buttons2
    updatemenu[1]['x']=0.36
    updatemenu[1]['y']=1.12

    fig.update_layout(showlegend=False, updatemenus=updatemenu)

    fig.update_layout(
        annotations=[
            dict(text="Left y-axis:", x=0, xref="paper", y=1.10, yref="paper",
                                 align="left", showarrow=False),
            dict(text="Right y-axis:", x=0.18, xref="paper", y=1.10,
                                 yref="paper", showarrow=False)])

    fig.update_layout(title_text    = title)

    fig.write_html(name, auto_open=True)

df=pd.read_excel('Dumy_for_stack.xlsx')
for Cat in df['Catalyst'].unique():
    dfT = df[df['Catalyst']== Cat]
    graph(dfT,Cat)

Но я хотел бы добавить третье меню, которое позволяет мне выбрать катализатор. Но как мне сделать меню, которое редактирует только «Catalyst #» и сохраняет «Response #»?

x = df[df['Catalyst'] == 'Catalyst #']['Temp]
y1 = df[df['Catalyst'] == 'Catalyst #']['Response #']
y2 = df[df['Catalyst'] == 'Catalyst #']['Response #']
...