Python >> Tutoriel Python >  >> Python Tag >> Plotly

Plotly :le menu déroulant n'affichera pas les tracés

Il est difficile de dire ce qui fonctionne et ce qui ne fonctionne pas dans vos extraits de code puisque vous avez fourni un échantillon de données qui ne fonctionne tout simplement pas. Cependant, je fait ont une suggestion pour vous qui répond directement à votre question concernant :

J'essaie de tracer trois graphiques (jour, mois, année) et de donner à l'utilisateur la possibilité de choisir le graphique qu'il souhaite voir avec un menu déroulant

L'extrait ci-dessous vous permettra de choisir entre deux ensembles de données :year et month . Et ce sont les ensembles de données exacts que vous avez fournis. Lorsque vous avez un échantillon de travail pour days , cet ensemble de données peut être facilement inclus. Et je me ferai un plaisir de le faire pour vous lorsque vous serez prêt.

Quoi qu'il en soit, le tracé suivant vous permettra de choisir year et month à l'aide d'un menu déroulant. Et ne vous inquiétez pas si la ligne de conception et le style de marqueur ne vous conviennent pas. Cela est simplement inclus dans le code sous forme d'espaces réservés que vous pouvez modifier comme bon vous semble.

Année

Mois

JOUR

(à déterminer...)

Code complet

import plotly.graph_objects as go
import pandas as pd

df_y=pd.DataFrame({'x':[2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020],
                   'y':[  73,  562, 1153,  700, 2104, 1816, 1691, 1082,  914,  482]})

df_m=pd.DataFrame({'x':['2011-06', '2011-07', '2011-08', '2011-09', '2011-10', '2011-11',
                        '2011-12', '2012-01', '2012-02', '2012-03', '2012-04', '2012-05',
                        '2012-06', '2012-07', '2012-08', '2012-09', '2012-10', '2012-11',
                        '2012-12', '2013-01', '2013-02', '2013-03', '2013-04', '2013-05',
                        '2013-06', '2013-07', '2013-08', '2013-09', '2013-10', '2013-11',
                        '2013-12', '2014-01', '2014-02', '2014-03', '2014-04', '2014-05',
                        '2014-06', '2014-07', '2014-08', '2014-09', '2014-10', '2014-11',
                        '2014-12', '2015-01', '2015-02', '2015-03', '2015-04', '2015-05',
                        '2015-06', '2015-07', '2015-08', '2015-09', '2015-10', '2015-11',
                        '2015-12', '2016-01', '2016-02', '2016-03', '2016-04', '2016-05',
                        '2016-06', '2016-07', '2016-08', '2016-09', '2016-10', '2016-11',
                        '2016-12', '2017-01', '2017-02', '2017-03', '2017-04', '2017-05',
                        '2017-06', '2017-07', '2017-08', '2017-09', '2017-10', '2017-11',
                        '2017-12', '2018-01', '2018-02', '2018-03', '2018-04', '2018-05',
                        '2018-06', '2018-07', '2018-08', '2018-09', '2018-10', '2018-11',
                        '2018-12', '2019-01', '2019-02', '2019-03', '2019-04', '2019-05',
                        '2019-06', '2019-08', '2019-09', '2019-10', '2019-11', '2019-12',
                        '2020-01', '2020-02', '2020-03', '2020-04', '2020-05', '2020-06'],
                    'y':[  1,   1,   2,   8,   4,  20,  37,  79,  16,  13,   8,  12,   2,   5,
                         68, 139,  57,  64,  99, 182,  63,  60,  74, 128,  59, 109, 126,  86,
                         77, 112,  77,  78,  44,  32,  22,  33,  46,  61,  66, 109,  81,  78,
                         50, 140, 151, 297, 173, 225,  69, 119, 213, 177, 134, 217, 189, 255,
                        149, 114, 127, 154, 116, 110, 150, 184, 179, 117, 161,  48, 115, 147,
                        153, 199, 174, 195, 154, 162, 114, 140,  90, 156,  81, 107,  62,  64,
                         49, 128, 127,  60,  89, 115,  44,  58,  86,  65, 102,  93,  82,  78,
                        158,  65,  50,  77,  55,  71,  70, 105, 124,  57]})

# IMPROVEMENT 1
# INSERT ANOTHER DATAFRAME FOR DAYS HERE WITH THE SAME STRUCTURE AS ABOVE

# IMPROVEMENT 1
# INCLUDE THE DATAFRAME AS VALUE AND THE NAME df_d as key
# in the dict below:

dfc = {'year':df_y, 'month':df_m}

# set index
for df in dfc.keys():
    dfc[df].set_index('x', inplace=True)


# plotly start 
fig = go.Figure()
# menu setup    
updatemenu= []

# buttons for menu 1, names
buttons=[]

# plotly start 
fig = go.Figure()
# one trace for each column per dataframe: AI and RANDOM
for df in dfc.keys():
    fig.add_trace(go.Scatter(x=dfc[df].index,
                             y=dfc[df]['y'],
                             visible=True,
                             #marker=dict(size=12, line=dict(width=2)),
                             #marker_symbol = 'diamond',
                             name=df
                  )
             )


# some line settings for fun
lines = [dict(color='royalblue', width=2, dash='dot'), dict(color='firebrick', width=1, dash='dash')]
markers = [dict(size=12, line=dict(width=2)), dict(size=12, line=dict(width=2))]

# create traces for each color: 
# build argVals for buttons and create buttons
for i, df in enumerate(dfc.keys()):
    args_y = []
    args_x = []
    for col in dfc[df]:
        args_y.append(dfc[df][col].values)
        args_x.append(dfc[df].index)
    argVals = [ {'y':args_y, 'x':args_x,
                 'marker':markers[i], 'line': lines[i]}]

    buttons.append(dict(method='update',
                        label=df,
                        visible=True,
                        args=argVals))

updatemenu=[]
your_menu=dict()
updatemenu.append(your_menu)
updatemenu[0]['buttons']=buttons
updatemenu[0]['direction']='down'
updatemenu[0]['showactive']=True


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