I have a problem with hovering on Choroplethmapbox.
When I load the page for the first time, hovering works fine.
But when I use Dropdown or Slider (they changedata for the map), hovertext does not show up.
And when I was typing this, I tried to click “Reset view” and it helped! But is there any way to make it work without clicking this button?
And by the way, ‘reset view’ also helped with another issue: when I change dropdown/slider, data update commits only after second attempt (I have to click twice on slider point).
My callbacks:
# this one updates the slider after selecting value from the dropdown
@app.callback(
[Output('app7-survivalyear', 'marks'),
Output('app7-survivalyear', 'max'),
Output('app7-survivalyear', 'value')],
[Input('app7-birthyear', 'value')]
)
def update_survivalyear(birthyear):
temp_df = df.loc[(df['Year of birth'] == birthyear)]
survivalyear_marks = dict()
survival_years = temp_df['Survival year'].unique()
survival_years.sort()
for i, survival_year in enumerate(survival_years):
survivalyear_marks[i] = survival_year
survivalyear_max = len(survival_years) - 1
print('marks', survivalyear_marks, 'surv max', survivalyear_max)
return survivalyear_marks, survivalyear_max, 0
# this one filters data depending on the dropdown and the slider values
@app.callback(
Output('app7-map', 'figure'),
[Input('app7-birthyear', 'value'),
Input('app7-survivalyear', 'value')]
)
def update_options(birth_year, survival_year_index):
sleep(1)
temp_df = df.loc[(df['Year of birth'] == birth_year) & (df['id'] != 'BY')]
survival_years = temp_df['Survival year'].unique()
survival_years.sort()
survival_year = survival_years[survival_year_index]
temp_df = temp_df.loc[(df['Survival year'] == survival_year)]
figure = go.Figure(go.Choroplethmapbox(geojson=geodata, locations=temp_df['id'], z=temp_df['Value'], reversescale=True,
colorscale="Cividis", zauto=True,
text=['Брестская область', 'Витебская область', 'Гомельская область',
'г. Минск', 'Гродненская область', 'Минская область',
'Могилевская область'],
hoverinfo='text+z',
marker_opacity=0.5, marker_line_width=1))
figure.update_layout(mapbox_style="carto-positron",
mapbox_zoom=5.3,
mapbox_center={"lat": 53.8, "lon": 27.6},
margin={"r": 0, "t": 0, "l": 0, "b": 0},
hovermode='closest'
)
return figure
Example: