尝试使用热图添加颜色条时出现AttributeError

时间:2019-02-24 08:43:37

标签: python pandas matplotlib

我正在尝试绘制热图以说明属性之间的相关性。尝试将颜色栏添加到图中时出现错误。这是代码和图像:

def housing_heatmap(data=housing_copy):
    columns = data.select_dtypes(exclude='object').columns
    corr_matrix = data.corr()

    fig, ax = plt.subplots(figsize=(8, 8))
    ax.matshow(corr_matrix, cmap='jet')

    ax.set_xticks(range(len(columns)))
    ax.set_yticks(range(len(columns)))
    ax.set_xticklabels(columns)
    ax.set_yticklabels(columns)
    plt.setp(ax.get_xticklabels(), rotation=45, ha='left', rotation_mode='anchor')
    plt.colorbar(corr_matrix)

    fig.tight_layout()
    plt.show()
    return None


housing_heatmap()

此代码在生成图像时给出错误。这是图片:

enter image description here

这是由该行引起的错误:

plt.colorbar(corr_matrix)
AttributeError: 'DataFrame' object has no attribute 'autoscale_None'

有什么方法可以在不产生此错误的情况下为热图添加颜色条吗?

谢谢。

2 个答案:

答案 0 :(得分:1)

您需要将图像传递到plt.colorbar,而不是矩阵本身:

def housing_heatmap(data= housing_copy):
    columns = data.select_dtypes(exclude='object').columns
    corr_matrix = data.corr()

    fig, ax = plt.subplots(figsize=(8, 8))
    mat_plot = ax.matshow(corr_matrix, cmap='jet')

    ax.set_xticks(range(len(columns)))
    ax.set_yticks(range(len(columns)))
    ax.set_xticklabels(columns)
    ax.set_yticklabels(columns)
    plt.setp(ax.get_xticklabels(), rotation=45, ha='left', rotation_mode='anchor')
    plt.colorbar(mat_plot)

    fig.tight_layout()
    plt.show()

housing_heatmap()

colorbar fixed

答案 1 :(得分:0)

万一有人想知道,我考虑了@RobinFrcd的答案,并在matplotlib.pyplot.colorbar中指定了fractionpad关键字参数。

def housing_heatmap(data):
    columns = data.select_dtypes(exclude='object').columns
    corr_matrix = data.corr()

    fig, ax = plt.subplots(figsize=(8, 8))
    mat = ax.matshow(corr_matrix, cmap='jet')

    ax.set_xticks(range(len(columns)))
    ax.set_yticks(range(len(columns)))
    ax.set_xticklabels(columns)
    ax.set_yticklabels(columns)
    plt.setp(ax.get_xticklabels(), rotation=45, ha='left', rotation_mode='anchor')
    plt.colorbar(mat, fraction=0.045, pad=0.05)

    fig.tight_layout()
    plt.show()

产生以下图像:

enter image description here

您可以更改fractionpad的值以获得所需的颜色条大小。

希望这对在那里的人有帮助。