首页 > 解决方案 > 如何将标题文本添加到来自 figurefactory 的两个带注释的热图?

问题描述

我正在使用 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')

标签: pythonplotplotlydata-science

解决方案


这是因为您的第二个数字试图将值传递给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因此您只需进行上述调整。


推荐阅读