Heat Maps with Same Scale Dash Plotly

@mJaslam: As @AIMPED suggestion, you can revise your code as below:

@app.callback([Output('card_num1', 'children'),
              Output('card_num2', 'children'),
              Output('card_num3', 'children'),
              Output('card_num4', 'children'),
              Output('card_num5', 'children'),
              Output('card_num6', 'children'),
              Output('card_num7', 'children'),
              Output('card_num8', 'children'),

                ],
              [Input('dropdown_year','value'),
               Input('dropdown_Installation','value'),
               Input('dropdown_metric','value') ])

def update_cards(Year,Installation,Metric):
    if Metric == 'CALIPER GROWTH (MM)':
        colormap = 'viridis'
    else:
        colormap = 'agsunset'

    df1_a = df1.loc[(df1['Year']==Year)&(df1['Installation']==Installation)&(df1['Metric']==Metric)&(df1['PLOT']==1) ].reset_index()
    df2_a = df1.loc[(df1['Year']==Year)&(df1['Installation']==Installation)&(df1['Metric']==Metric)&(df1['PLOT']==2)].reset_index()
    df3_a = df1.loc[(df1['Year']==Year)&(df1['Installation']==Installation)&(df1['Metric']==Metric)&(df1['PLOT']==3)].reset_index()
    df4_a = df1.loc[(df1['Year']==Year)&(df1['Installation']==Installation)&(df1['Metric']==Metric)&(df1['PLOT']==4)].reset_index()
    df5_a = df1.loc[(df1['Year']==Year)&(df1['Installation']==Installation)&(df1['Metric']==Metric)&(df1['PLOT']==5)].reset_index()
    df6_a = df1.loc[(df1['Year']==Year)&(df1['Installation']==Installation)&(df1['Metric']==Metric)&(df1['PLOT']==6)].reset_index()
    df8_a = IMP1.loc[(IMP1['Year']==Year)&(IMP1['Installation']==Installation)&(IMP1['Metric']==Metric) ].reset_index()
    df7_a = WR1.loc[(WR1['Year']==Year)&(WR1['Installation']==Installation)&(WR1['Metric']==Metric) ].reset_index()

    value_1_max = df1_a['Value'].max()
    value_2_max = df2_a['Value'].max()
    value_3_max = df3_a['Value'].max()
    value_4_max = df4_a['Value'].max()
    value_5_max = df5_a['Value'].max()
    value_6_max = df6_a['Value'].max()
    
    value_1_min = df1_a['Value'].min()
    value_2_min = df2_a['Value'].min()
    value_3_min = df3_a['Value'].min()
    value_4_min = df4_a['Value'].min()
    value_5_min = df5_a['Value'].min()
    value_6_min = df6_a['Value'].min()
    
    max_value=max([value_1_max,value_2_max,value_3_max,value_4_max,value_5_max,value_6_max])
    min_value=max([value_1_min,value_2_min,value_3_min,value_4_min,value_5_min,value_6_min])





    fig = go.Figure(data=go.Heatmap(
         z=df1_a['Value'],zmin=min_value, zmax=max_value,
         x=df1_a['Seedlot'],
         y=df1_a['Replication'],
         text=df1_a['Defect'],
         hovertext=df1_a['Management'],
         colorscale=colormap, hoverongaps = True, hovertemplate='Seedlot: %{x}<br>Value: %{z}<br>Defect: %{text}<br>Management: %{hovertext}<extra></extra>'))

    fig['layout']['yaxis']['autorange'] = "reversed"

    fig.update_layout(template="plotly_white",
         margin=dict(l = 20, r = 5, t = 10, b = 10),
         yaxis_nticks=10,
     )
   
    fig.update_xaxes(side="top", tickangle = 270)

So you will map colorscale with your Metric and then pass it to fig setting.
For Sherry Transfer, because Replication is blank so that it did not show. So you want to show picture, not chart?


2 Likes