最近参加华数杯数学建模,国赛前热身,也是我倒数第二次建模比赛(为了留住我的秀发)
为了保证图片的质量,热力图与显著性标注往往不可兼得。要显示热力图,显著性就很难标注。本文中图片质量、热力图、显著性均可兼得。当然,这需要一点点Python基础。
先来看看效果如何,图片格式任意保存,此处仅作演示。
如果你也想做,那就接着往下看吧。
我就不喜欢把代码分成一块一块的讲,我就喜欢直接让你们复制拿走。其实也没几行代码,没什么好分开说的(真相)。
#注释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)
补充一:
还是给大家看看我的相关系数矩阵是怎么存的吧。
注意3点:文件名、无索引存储、页名。方法不唯一,此处仅做为参考。
补充二:如何安装python第三方库?
我用的环境是Pycharm, 第三方库安装源使用的是豆瓣安装源,只需在终端(Terminal)输入以下命令即可。
pip install -i https://pypi.doubanio.com/simple 库名
补充三:
代码注释已经尽可能详细,高手一看就懂,新手也许有些疑问,小白就不说了。有疑问欢迎在评论区留言交流。
要想鱼与熊掌兼得,并不只有一种方法,比如神奇的P图技术,P图我比较小白,之前也有试过在pdf文件注释显著性标注,但导入Latex时发现显著性标注还是不见了。若将修改后的pdf文件处理成图片,像素还是丢失了。虽然没那么清晰,但也勉强能用。