Черточка Python : Настройка цветовой легенды при форматировании таблицы

#python #colors #plotly #plotly-dash #plotly-python

Вопрос:

Я хочу раскрасить столбец, обозначив крайние малые и большие значения (красным цветом) и средние значения (зеленым цветом). Ниже приведен пример легенды цветовой шкалы.

введите описание изображения здесь

Однако, используя следующий код с «RdYlGn» по умолчанию, я смогу сделать это только с цветовой легендой по умолчанию введите описание изображения здесь

 def discrete_background_color_bins(df, n_bins=7, columns='all'):

 bounds = [i * (1.0 / n_bins) for i in range(n_bins 1)]
 if columns == 'all':
     if 'id' in df:
         df_numeric_columns = df.select_dtypes('number').drop(['id'], axis=1)
     else:
         df_numeric_columns = df.select_dtypes('number')
 else:
     df_numeric_columns = df[columns]
 df_max = df_numeric_columns.max().max()
 df_min = df_numeric_columns.min().min()
 ranges = [
     ((df_max - df_min) * i)   df_min
     for i in bounds
 ]
 styles = []
 legend = []
 for i in range(1, len(bounds)):
     min_bound = ranges[i - 1]
     max_bound = ranges[i]
     backgroundColor = colorlover.scales[str(n_bins 4)]['div']['RdYlGn'][2:-2][i - 1]
     color = 'black'

     for column in df_numeric_columns:
         styles.append({
             'if': {
                 'filter_query': (
                     '{{{column}}} >= {min_bound}'  
                     (' amp;amp; {{{column}}} < {max_bound}' if (i < len(bounds) - 1) else '')
                 ).format(column=column, min_bound=min_bound, max_bound=max_bound),
                 'column_id': column
             },
             'backgroundColor': backgroundColor,
             'color': color
         })
     legend.append(
         html.Div(style={'display': 'inline-block', 'width': '60px'}, children=[
             html.Div(
                 style={
                     'backgroundColor': backgroundColor,
                     'borderLeft': '1px rgb(50, 50, 50) solid',
                     'height': '10px'
                 }
             ),
             html.Small(round(min_bound, 2), style={'paddingLeft': '2px'})
         ])
     )

 return (styles, html.Div(legend, style={'padding': '5px 0 5px 0'}))
 

Может ли кто-нибудь сообщить мне, как выделить экстремальные значения красным цветом и средние значения зеленым (или синим) ?

Спасибо.

Ответ №1:

Наконец-то получил ответ !

 ....
styles = []
legend = []
backgroundColors = ['rgb(215,48,39)', 'rgb(252,141,89)', 'rgb(145,207,96)', 'rgb(26,152,80)', 'rgb(145,207,96)', 'rgb(252,141,89)',  'rgb(215,48,39)']
for i in range(1, len(bounds)):
    min_bound = ranges[i - 1]
    max_bound = ranges[i]
    backgroundColor = backgroundColors[i - 1]
    color = "white" if i > len(bounds) / 2.0 else "inherit"
    ....