代码之家  ›  专栏  ›  技术社区  ›  Sean

尝试用热图添加colorbar时出现AttributeError

  •  0
  • Sean  · 技术社区  · 6 年前

    我想画一张热图来说明属性之间的关联。尝试将颜色条添加到图形时出错。以下是代码和图像:

    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'
    

    有没有什么方法可以添加热图的色条而不产生这个错误?

    非常感谢。

    0 回复  |  直到 6 年前
        1
  •  1
  •   RobinFrcd    6 年前

    你需要把图像传给 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

        2
  •  0
  •   Sean    6 年前

    如果有人想知道,我考虑了@robinfcd的答案,并指定了 fraction pad 中的关键字参数 matplotlib.pyplot.colorbar .

    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

    您可以更改 分数 衬垫 以获得所需的色条大小。