Trp_Cys 2024-10-28 20:29 采纳率: 58.6%
浏览 19
已采纳

为什么下载的皮尔逊相关系数热力图是空白的?

利用以下代码,绘制皮尔逊相关系数热力图:

import pandas as pd  
import numpy as np  
import matplotlib.pyplot as plt  
import seaborn as sns  
import matplotlib  
  
city_ls = ['Beijing', 'Chengdu', 'Guangzhou', 'Shanghai', 'Shenyang']  
  
def fileName(s):  
    return '{}PM20100101_20151231.csv'.format(s)  
  
for city in city_ls:  
    file = fileName(city)  
    df = pd.read_csv(file)  
    col = df.columns  
    factor_ls = []  
    dis_ls = []  
      
    if city == 'Beijing':  
        factor_ls = [col[i] for i in range(len(col)) if i > 9 and pd.api.types.is_numeric_dtype(df[col[i]])]  
    else:  
        factor_ls = [col[i] for i in range(len(col)) if i > 8 and pd.api.types.is_numeric_dtype(df[col[i]])]  
      
    dis_ls = [c for c in col if c.startswith('PM_') and c != 'PM_US Post' and pd.api.types.is_numeric_dtype(df[c])]  
      
    df_china = df[dis_ls + factor_ls]  
    df_china = df_china.dropna()  
      
    if 'PM_US Post' in col and pd.api.types.is_numeric_dtype(df['PM_US Post']):  
        df_US = df[['PM_US Post'] + factor_ls]  
        df_US = df_US.dropna()
      
    corr = df_china.corr(method='pearson')  
      
    # 设置图形大小  
    plt.figure(figsize=(12, 10))  
    sns.heatmap(corr, annot=True, cmap='coolwarm')  
      
    # 设置中文的字体  
    matplotlib.rcParams['font.sans-serif'] = ['SimHei']  # 用黑体显示中文  
    matplotlib.rcParams['axes.unicode_minus'] = False    # 正常显示负号  
      
    plt.title(f'{city} Correlation Heatmap')  
    fig_file = f'./fig/{city}各区相关系数热力图.jpg'
    plt.savefig(fig_file) 
    plt.show()
    
    print(corr)

在Jupyter中,图片可以正常显示:

img


但是下载的png格式的图片却是空白:

img

如何让下载的图片可以正常显示?

  • 写回答

1条回答 默认 最新

  • 无疆76 2024-10-28 20:30
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    根据您提供的代码和描述,您遇到的问题可能是关于如何正确保存和显示皮尔逊相关系数热力图。针对您的问题,以下是可能的解决方案:

    1. 确保图形渲染完全完成:在某些情况下,绘图窗口可能因为处理数据量较大而没有完全渲染完成就保存了。尝试在执行 plt.savefig() 之前稍微等待一下,确保图形已经完全渲染出来。
    2. 使用不同的后端渲染工具:在 Jupyter Notebook 中,有时候默认的渲染后端可能不适合保存图像。您可以尝试使用其他后端工具来渲染和保存图像。例如,使用 matplotlib.backends.backend_agg 作为渲染后端。
    3. 检查文件保存路径和权限:确保您有权限在指定的路径下保存图像文件,并且路径是正确的。如果路径不存在,创建相应的文件夹。
    4. 检查图像格式和编码问题:有时候,保存的图像可能因为编码问题无法正常显示。尝试使用不同的图像格式(如 PNG)来保存图像,并检查是否有损坏或编码问题。
    5. 检查相关性数据:确保生成的热力图数据(即相关系数矩阵)是有意义的并且不为空。您可以打印相关系数矩阵(print(corr)),检查输出是否为空或是否有异常值。
    6. 调整字体设置:您的代码中已经设置了字体用于显示中文,这通常不会导致热力图空白。但如果出现问题,您可以再次确认字体设置是否正确。

    如果以上方法都不能解决问题,建议您检查其他部分的代码是否有错误,或者尝试简化代码逻辑,逐步调试以找到问题所在。此外,还可以考虑查看是否有相关的错误消息或警告,这可能会提供解决问题的线索。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 1月26日
  • 创建了问题 10月28日