Python pandas плотная экспресс-метка на столбчатой диаграмме с накоплением

#python #pandas #hover #plotly #legend

#python #pandas #наведите курсор #плотная #легенда

Вопрос:

Я ищу, как добавить легенду и сведения о наведении курсора мыши к диаграмме пирамиды населения, используя pandas с столбчатой диаграммой с накоплением, используя данные с длинным форматированием. Мужской набор данных содержит шесть демографических данных, а также женский: Male = [‘TOT_MALE’, ‘WA_MALE’, ‘H_MALE’, ‘BA_MALE’, ‘AA_MALE’, ‘IA_MALE’, ‘NA_MALE’ ] возрастной диапазон 0-100, Male имеет значение из списка выше, и хорошо как женщина, так что каждый месяц данных содержит 606 строк данных на участок. Данные ‘df’ выглядят следующим образом:

 PERIOD  AGE      MALE_PCT    FEMALE_PCT     MALE     FEMALE
19190  10_2011    0 -9.631521e-03  8.877940e-03  WA_MALE  WA_FEMALE
19191  10_2011    1 -9.612318e-03  8.898409e-03  WA_MALE  WA_FEMALE
19192  10_2011    2 -9.487544e-03  8.789053e-03  WA_MALE  WA_FEMALE
19193  10_2011    3 -9.819133e-03  9.074287e-03  WA_MALE  WA_FEMALE
19194  10_2011    4 -9.968353e-03  9.223383e-03  WA_MALE  WA_FEMALE
...
19795  10_2011    100 -1.6968353e-07  2.45223383e-07  WA_MALE  WA_FEMALE
 

И код:

 import plotly
import plotly.express as px
from plotly.subplots import make_subplots
import plotly.graph_objs as go

df_4 = pd.DataFrame()
df_5 = pd.DataFrame()
df = pd.DataFrame()
fig = ''
df_4 = pd.read_csv(f'{pop_data}/census_ten_year_clean_data.csv', index_col=0)
df_4 = df_4[['PERIOD', 'AGE', 'MALE_PCT', 'FEMALE_PCT', 'MALE', 'FEMALE']].copy()
df_4 = df_4[df_4.MALE != 'TOT_MALE'] # removes #total details


df_5 = mask(df_4, 'PERIOD', '10_2011')
df = df_5 # limiting to just one month to get  #ploty correct

colors_F = ['#3366CC',] * 101   ['#DC3912',] * 101   ['#FF9900',] * 101   
           ['#109618',] * 101   ['#990099',] * 101   ['#004496',] * 101
colors_M = ['#3366FF',] * 101   ['#DC3900',] * 101   ['#FF9855',] * 101   
           ['#109600',] * 101   ['#990000',] * 101   ['#004400',] * 101

fig = make_subplots(rows=1, cols=2,
                    subplot_titles=['Male', 'Female'],
                    shared_yaxes=True, 
                    horizontal_spacing = 0.003
                    )

fig.add_trace(go.Bar(name='Male',
                    x=df.MALE_PCT,
                    y=df['AGE'],
                    hovertext=df['MALE_PCT'],
                    orientation='h',
                    marker_color=colors_M
                    ),
            row=1, col=1)
fig.add_trace(go.Bar(name='Female',
                    x=df.FEMALE_PCT,
                    y=df['AGE'],
                    hovertext=df['FEMALE_PCT'],
                    orientation='h',
                    marker_color=colors_F
                    ),
            row=1, col=2)
            
fig['layout']['xaxis1'].update(dict(
        tickmode = 'auto',
        tickvals = df.MALE_PCT))
fig['layout']['xaxis2'].update(dict(
        tickmode = 'auto',
        tickvals = df.FEMALE_PCT))

fig.update_layout(barmode="stack", width=1200, height=800)
fig.show()
print(df)
 

Заранее спасибо, пример графика:
введите описание изображения здесь