带显著性标注的相关系数热力图

相关系数热力图与显著性标注可以兼得

      • 一、结果展示
      • 二、完整代码实现
      • 三、补充说明

最近参加华数杯数学建模,国赛前热身,也是我倒数第二次建模比赛(为了留住我的秀发)

为了保证图片的质量,热力图与显著性标注往往不可兼得。要显示热力图,显著性就很难标注。本文中图片质量、热力图、显著性均可兼得。当然,这需要一点点Python基础。

一、结果展示

先来看看效果如何,图片格式任意保存,此处仅作演示。

带显著性标注的相关系数热力图_第1张图片

如果你也想做,那就接着往下看吧。

二、完整代码实现

我就不喜欢把代码分成一块一块的讲,我就喜欢直接让你们复制拿走。其实也没几行代码,没什么好分开说的(真相)。

#注释0:以下是三个需要导入的库,需要提前在环境中安装好
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

#注释1:此处为从Excel读取相关系数矩阵
df = pd.read_excel('绩效.xlsx',      #Excel文件名
                   sheet_name='sp',  #相关系数矩阵我放在名为‘sp’的那一页
                   header=None,      #行索引设置为无
                   index_col=None    #列索引设置为无
                   )

#注释2:创建图片框架
f, ax1 = plt.subplots(figsize=(6,5),nrows=1) #设置图片大小,图的版式

#注释3:此处就是标注显著性了,调节好坐标就行了
for i in [0.75, 1.75, 2.75, 3.75, 4.75]:
    for j in [0.45, 1.45, 2.45, 3.45, 4.45]:
        plt.text(i, j, "**", size = 10, alpha = 2, color = "black")

#注释4:绘制热力图
s = sns.heatmap(df,       #此处为相关系数矩阵
                annot=True, #annot设置为True,使得heatmap中每个方格显示相关系数
                fmt= '.3f',  #设置相关系数保留三位小数
                vmax=1.0,vmin=-1.0,  #设置图例中最大值和最小值的显示值
                cmap='coolwarm',  #此处为matplotlib的colormap名称或颜色对象,该参数颜色1为红,-1为蓝
                xticklabels=['SR','CY','HJ','WJ','SS'],  #将列表中的内容显示在横坐标处
                yticklabels=['SR','CY','HJ','WJ','SS']   #将列表中的内容显示在纵坐标处
                )
ax1.set_xlabel('2020')  #怎么说呢,看图就懂了
ax1.set_ylabel('2015')  #按自己喜欢的方式设置就好了

#注释5:保存图片,格式任选
map = s.get_figure()
map.savefig('.\Perfect.pdf', dpi = 400)

三、补充说明

补充一
还是给大家看看我的相关系数矩阵是怎么存的吧。

带显著性标注的相关系数热力图_第2张图片

注意3点:文件名、无索引存储、页名。方法不唯一,此处仅做为参考。

补充二:如何安装python第三方库?

我用的环境是Pycharm, 第三方库安装源使用的是豆瓣安装源,只需在终端(Terminal)输入以下命令即可。

pip install -i https://pypi.doubanio.com/simple 库名

补充三
代码注释已经尽可能详细,高手一看就懂,新手也许有些疑问,小白就不说了。有疑问欢迎在评论区留言交流。

要想鱼与熊掌兼得,并不只有一种方法,比如神奇的P图技术,P图我比较小白,之前也有试过在pdf文件注释显著性标注,但导入Latex时发现显著性标注还是不见了。若将修改后的pdf文件处理成图片,像素还是丢失了。虽然没那么清晰,但也勉强能用。

你可能感兴趣的:(Python,python,数学建模)