Как добавить текст заголовка к двум аннотированным тепловым картам из figurefactory?

avatar
Luleo_Primoc
8 августа 2021 в 21:20
121
1
0

Я использую plotly для создания двух аннотированных тепловых карт. По какой-то причине я не могу добавить title_text, когда присутствуют две цифры. Следующее дает мне сообщение об ошибке Invalid property specified for object of type plotly.graph_objs.Heatmap: 'title'

# Data Visualization

import plotly.figure_factory as ff


def confusion_matrix(class_indices):
    train_z = [[2, 4],
               [2, 4]]

    val_z = [[6, 8],
             [6, 8]]

    x = ['True (1)', 'False (0)']
    y = ['Negative', 'Positive']

    # Turn each item in z into a string for annotation only
    def string_annotation_converter(z_data):
        z_text = [[str(y) for y in x] for x in z_data]
        return z_text

    # set up figure
    train_confusion_mat = ff.create_annotated_heatmap(train_z, x=x, y=y,
                                                      colorscale='Viridis',
                                                      annotation_text=string_annotation_converter(train_z))
    train_confusion_mat.update_layout(title_text=f'Training CM - {str(class_indices)}')

    val_confusion_mat = ff.create_annotated_heatmap(val_z, x=x, y=y,
                                                    colorscale='Viridis',
                                                    annotation_text=string_annotation_converter(val_z),
                                                    title_text=f'Validation CM - {str(class_indices)}')
    val_confusion_mat.update_layout(title_text=f'Validation CM - {str(class_indices)}')


confusion_matrix('title')

Однако, когда я удаляю вторую цифру, которую я хочу включить, она вдруг работает? Почему это так и что я могу сделать, чтобы обойти эту проблему?:

# Data Visualization

import plotly.figure_factory as ff


def confusion_matrix(class_indices):
    train_z = [[2, 4],
               [2, 4]]

    val_z = [[6, 8],
             [6, 8]]

    x = ['True (1)', 'False (0)']
    y = ['Negative', 'Positive']

    # Turn each item in z into a string for annotation only
    def string_annotation_converter(z_data):
        z_text = [[str(y) for y in x] for x in z_data]
        return z_text

    # set up figure
    train_confusion_mat = ff.create_annotated_heatmap(train_z, x=x, y=y,
                                                      colorscale='Viridis',
                                                      annotation_text=string_annotation_converter(train_z))
    train_confusion_mat.update_layout(title_text=f'Training CM - {str(class_indices)}')


confusion_matrix('title')
Источник

Ответы (1)

avatar
Bas van der Linden
9 августа 2021 в 17:07
0

Это потому, что ваша вторая фигура пытается передать значение свойству title_text ff.create_annotated_heatmap. Поскольку ошибка говорит, что это недопустимое свойство.

Вы не передаете этот параметр на первый график, поэтому он работает.

Итак, измените это:

val_confusion_mat = ff.create_annotated_heatmap(
    val_z,
    x=x,
    y=y,
    colorscale="Viridis",
    annotation_text=string_annotation_converter(val_z),
    title_text=f"Validation CM - {str(class_indices)}",
)

к этому:

val_confusion_mat = ff.create_annotated_heatmap(
    val_z,
    x=x,
    y=y,
    colorscale="Viridis",
    annotation_text=string_annotation_converter(val_z),
)

Вы уже обновили title_text обеих фигур до update_layout, так что вам нужно только внести изменения, упомянутые выше.