0 前言

鉴于Matlab画图已经被封,自此画图战线全部转移到Python上来,这篇博客描述了Python画热力图的方法以及我踩到的坑。

1 程序

1.1 导入包

这里使用seaborn的heatmap函数绘制

import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns

1.2 载入CSV文件

这里替换自己要画的矩阵,选择好index_col。及矩阵的每一行每一列是什么,要考虑好。

df_2 = pd.read_csv('HeatMap.csv',index_col='Model')

1.3 绘制热力图

fig = plt.figure()
ax  = fig.add_subplot(1,1,1)
p1 = sns.heatmap(df_2,annot=True,ax=ax)
ax.set_title('Heat Map')
ax.set_xlabel('')
ax.set_ylabel('')

1.4 保存

先获取活动图,再用savefig保存

s1 = p1.get_figure()
s1.savefig('HeatMap.jpg',dpi=300,bbox_inches='tight')

2 踩到的坑

2.1 CSV文件格式问题

首先是CSV文件编码,最好不要直接把excel重命名成csv,而是另存为csv,因为excel的编码方式与CSV不同,如果直接重命名可能导致read_csv函数爆编码错误。

CSV文件内容问题,尤其是矩阵各行各列的标题,可以不保留标题,后续再使用函数添加,也可以在CSV文件中定义好,读取的时候选择好index_col。

2.2 画图问题

变量ax的目的是确定好坐标轴,使用sns.heatmap指定好坐标轴,各参数的作用再后文参考文献中。

2.3 保存图像不完整问题

我遇到了保存图像不完整的问题,一开始以为是版本问题,后来发现,直接在jupyter notebook中显示时一切正常,但是保存后发现左边不完整,才知道是保存的问题。

s1.savefig('HeatMap.jpg',dpi=300,bbox_inches='tight')

在这里指定 bbox_inches='tight’后,Bug修复,一切结束。

3 参考

关于seaborn.heatmap函数的详细解读
参考:
[1]、函数解读:看这里
[2]、保存不完整,看这里

seaborn.heatmap(data, vmin=None, vmax=None,cmap=None, center=None, robust=False, annot=None, fmt=’.2g’, annot_kws=None,linewidths=0, linecolor=’white’, cbar=True, cbar_kws=None,cbar_ax=None,square=False, xticklabels=’auto’, yticklabels=’auto’,mask=None, ax=None,**kwargs)

(1)热力图输入数据参数:
data:矩阵数据集,可以是numpy的数组(array),也可以是pandas的DataFrame。如果是DataFrame,则df的index/column信息会分别对应到heatmap的columns和rows,即pt.index是热力图的行标,pt.columns是热力图的列标

(2)热力图矩阵块颜色参数: vmax,vmin:分别是热力图的颜色取值最大和最小范围,默认是根据data数据表里的取值确定
cmap:从数字到色彩空间的映射,取值是matplotlib包里的colormap名称或颜色对象,或者表示颜色的列表;改参数默认值:根据center参数设定
center:数据表取值有差异时,设置热力图的色彩中心对齐值;通过设置center值,可以调整生成的图像颜色的整体深浅;设置center数据时,如果有数据溢出,则手动设置的vmax、vmin会自动改变
robust:默认取值False;如果是False,且没设定vmin和vmax的值,热力图的颜色映射范围根据具有鲁棒性的分位数设定,而不是用极值设定

(3)热力图矩阵块注释参数:
annot(annotate的缩写):默认取值False;如果是True,在热力图每个方格写入数据;如果是矩阵,在热力图每个方格写入该矩阵对应位置数据
fmt:字符串格式代码,矩阵上标识数字的数据格式,比如保留小数点后几位数字
annot_kws:默认取值False;如果是True,设置热力图矩阵上数字的大小颜色字体,matplotlib包text类下的字体设置;官方文档:

(4)热力图矩阵块之间间隔及间隔线参数: linewidths:定义热力图里“表示两两特征关系的矩阵小块”之间的间隔大小
linecolor:切分热力图上每个矩阵小块的线的颜色,默认值是’white’

(5)热力图颜色刻度条参数: cbar:是否在热力图侧边绘制颜色刻度条,默认值是True
cbar_kws:热力图侧边绘制颜色刻度条时,相关字体设置,默认值是None
cbar_ax:热力图侧边绘制颜色刻度条时,刻度条位置设置,默认值是None

(6)square:设置热力图矩阵小块形状,默认值是False xticklabels,
yticklabels:xticklabels控制每列标签名的输出;yticklabels控制每行标签名的输出。默认值是auto。如果是True,则以DataFrame的列名作为标签名。如果是False,则不添加行标签名。如果是列表,则标签名改为列表中给的内容。如果是整数K,则在图上每隔K个标签进行一次标注。
如果是auto,则自动选择标签的标注间距,将标签名不重叠的部分(或全部)输出

mask:控制某个矩阵块是否显示出来。默认值是None。如果是布尔型的DataFrame,则将DataFrame里True的位置用白色覆盖掉
ax:设置作图的坐标轴,一般画多个子图时需要修改不同的子图的该值
**kwargs:All other keyword arguments are passed to ax.pcolormesh

【画图】Python绘制热力图方法以及保存不全问题(seaborn.heatmap)相关推荐

  1. 可视化篇(五)——— python绘制热力图及案例

    可视化篇(五)--- python绘制热力图及案例 摘要 效果图 python代码 摘要 本文演示了如何通过python绘制热力图,并给出了其应用于展示数据之间相关性的案例供读者参考. 效果图 pyt ...

  2. python怎么画条形图-python绘制条形图方法代码详解

    1.首先要绘制一个简单的条形图 import numpy as np import matplotlib.pyplot as plt from matplotlib import mlab from ...

  3. python画条形图-python绘制条形图方法代码详解

    1.首先要绘制一个简单的条形图 import numpy as np import matplotlib.pyplot as plt from matplotlib import mlab from ...

  4. Python 绘制热力图

    Python绘制热力图 reference 目标:绘制如下的 hotmap 或者 density-map ,把坐标和hot-value或者density-value替换为自己的数据,稍微改进就可以绘制 ...

  5. Python绘制热力图

    最近在建模时有绘制相关系数矩阵热力图的需要,在此记录一下热力图的基本使用 这里使用seaborn库中的的heatmap完成热力图的绘制,我们可以根据图中不同方块颜色来判断变量之间相关系数的大小,接下来 ...

  6. Python 绘制热力图参数详解

    同个人网站 https://www.serendipper-x.cn/,欢迎访问 ! 参数设置: (1)热力图输入数据参数: data:矩阵数据集,可以是numpy的数组(array),也可以是pan ...

  7. 使用Python绘制各种方法的词云图

    import jieba from PIL import Image from wordcloud import WordCloud import numpy as np import matplot ...

  8. python相关系数热力图_python绘制热力图heatmap

    本文实例为大家分享了python绘制热力图的具体代码,供大家参考,具体内容如下 python的热力图是用皮尔逊相关系数来查看两者之间的关联性. #encoding:utf-8 import numpy ...

  9. python热力图代码_python绘制热力图heatmap

    本文实例为大家分享了python绘制热力图的具体代码,供大家参考,具体内容如下 python的热力图是用皮尔逊相关系数来查看两者之间的关联性. #encoding:utf-8 import numpy ...

最新文章

  1. Spark Streaming实践和优化
  2. java 媒体播放器_Java多媒体播放器(三)
  3. squid缓存服务器
  4. GitLab [Webhooks] 实现自动化服务器部署
  5. 050_Boolean对象
  6. Kettle使用_13 表输入并发运行与复制数量
  7. python3 tkinter电子书_Python3 Tkinter-Text
  8. ue4 设置intellisence_UE4.22编辑器界面操控设置(4)
  9. 【小记】-006--关于高度塌陷的问题
  10. java、c语言、python、c++的不同之处_总结几点C/C++、Java与Python的区别
  11. 200多个新颖独特的域名展示
  12. 工业机器人维保调查表_《工业机器人系统集成及维护》课程建设调研报告
  13. HDU 2340 - Obfuscation(dp)
  14. jsp版本的环境变量集合
  15. 结对-结对编项目作业名称-开发环境搭建过程
  16. linux 进程 cpu 100,清理linux中占用CPU 100%的病毒
  17. 电信猫的无线无法连接服务器,光纤猫连接路由器无法上网怎么办
  18. 今日不谈股市, 谈谈财政部副部长廖晓军不降个税问题
  19. 写在2020.11.19 周四晚上
  20. 同步传输和异步传输原理与比较

热门文章

  1. [2018 徐州 网络赛|Hard to prepare ] 环形染色问题的公式解法
  2. 看完不会的来打我!已成功拿下字节、腾讯、脉脉offer,满满干货指导
  3. 升级版的工厂模式(外联配置文件+内用反射),体现多态好处(^-^) 【java基础-----多态好处】
  4. shell和Zsh和ohmyzsh
  5. 官方确认中国启动超导无轴陀螺空天载具研发
  6. 自家群晖开启永久免费图床,开始typora, picgo,markdown的美好生活
  7. android全屏命令,微信全屏表情指令2020安卓版-2020微信满屏幕表情指令软件v7.0.19 清爽版-007游戏网...
  8. Linux系统打开文件命令
  9. 后台getshell常用技巧
  10. Spark MLlib 源码学习---朴素贝叶斯模型(Naive Bayes)