Agregar menú desplegable al mapa Choropleth para seleccionar cada estado y generar un nuevo tipo de gráfico

He creado un mapa de Choropleth y quiero saber si es posible agregar un menú desplegable con cada estado. Cuando selecciona el menú desplegable, el gráfico cambia a un gráfico lineal de la cantidad de Grados obtenidos con el tiempo en ese estado.

Una muestra de mis datos:

        year state statetotal ba_total
0     1984.0    AK      221.0    108.0
1     1985.0    AK      242.0    141.0
2     1984.0    NC      229.0    117.0
3     1985.0    NC      257.0    138.0
4     1984.0    MA      272.0    165.0
5     1985.0    MA      280.0    176.0
6     1984.0    NY      375.0    249.0
7     1985.0    NY      309.0    208.0

Esto es lo que he probado hasta ahora:

for col in df.columns:
    df[col] = df[col].astype(str)

scl = [[0.0, 'rgb(242,240,247)'],[0.2, 'rgb(218,218,235)'],[0.4, 'rgb(188,189,220)'],\
            [0.6, 'rgb(158,154,200)'],[0.8, 'rgb(117,107,177)'],[1.0, 'rgb(84,39,143)']]

df['text'] = df['statename'] + '<br>' + \
    'Bachelor '+df['ba_total']+'<br>'+ \
    'Master '+df['ma_total']+'<br>'+ \
    'PhD '+df['phd_total']

# Years
years = list(df['year'].astype(float).astype(int).unique())

# make data
data = []

# Append data
for year in years:
    dataset_by_year = df[df['year'].astype(float).astype(int) == int(year)]

    data_dict = [ dict(
        type='choropleth',
        visible=True,
        colorscale = scl,
        autocolorscale = False,
        locations = dataset_by_year['state'],
        z = dataset_by_year['statetotal'].astype(float),
        locationmode = 'USA-states',
        text = dataset_by_year['text'],
        marker = dict(
            line = dict (
                color = 'rgb(255,255,255)',
                width = 2
            ) ),
        colorbar = dict(
            title = "Educ. Grads")
        ) ]
    data.append(data_dict[0])

# let's create the steps for the slider
steps = []
for i in range(len(data)):
    step = dict(method='restyle',
                args=['visible', [False] * len(data)],
                label='{}'.format(i + 1984))
    step['args'][1][i] = True
    steps.append(step)

sliders = [dict(active=0,
                pad={"t": 1},
                steps=steps)]    

# create the empty dropdown menu
updatemenus = list([dict(buttons=list()), 
                    dict(direction='down',
                         showactive=True)])

total_codes = len(df.state.unique()) + 1

for s, state in enumerate(df.state.unique()):
    # add a trace for each state
    data.append(dict(type='scatter',
                     x=[i for i in range(1984, 2016)],
                     y=[i for i in df.statetotal],
                     visible=False))

    # add each state to the dropdown    
    visible_traces = [False] * total_codes
    visible_traces[s + 1] = True
    updatemenus[0]['buttons'].append(dict(args=[{'visible': visible_traces}],
                                          label=state,
                                          method='update'))

# add a dropdown entry to reset the map    
updatemenus[0]['buttons'].append(dict(args=[{'visible': [True] + [False] *  (total_codes - 1)}],
                                      label='Map',
                                      method='update'))

layout = dict(title='Aggregated Number of Graduates in Education by State',
              updatemenus=updatemenus,
              geo=dict(scope='usa',
                       projection={'type': 'albers usa'}),
              sliders=sliders)

fig = dict(data=data, 
           layout=layout)

Estoy obteniendo unAttributeError relacionado con la función que he creado, pero anteriormente logré generar el gráfico con los menús presentes, pero el gráfico generó 50 botones de menú en lugar de un menú desplegable con 50 opciones.

Creo que estos problemas pueden resolverse, pero el quid de mis problemas es si es posible o no combinar los tipos de gráficos. Idealmente, me gustaría mostrar un gráfico lineal si hago clic en Alaska que muestra el número de títulos de licenciatura completados durante el período de tiempo observado. es posible?

EDITAR Código

Logré que el menú desplegable funcionara pero no encaja bien con elcontrol deslizante y el mapa No sé cómo hacer que el control deslizante desaparezca al hacer clic en un elemento en el menú desplegable o cómo evitar que el mapa se superponga en la parte superior del gráfico de líneas.

Respuestas a la pregunta(1)

Su respuesta a la pregunta