1. 引言
在本文中,我们将使用Seaborn
库来以heatmap
热力图的形式来表示数据。我们将重点介绍如何创建它,以及如何更改其颜色,调整对应字体大小等等。
闲话少说,我们直接开始吧!
2. 什么是热力图?
Heatmap
,中文称为热力图,是一种数据可视化技术,它通过颜色的变化来表示数据的大小或密度。在热力图中,数据大小的变化通常会被表示为颜色渐变,从而在二维空间上形成一种“热度”的分布图。
颜色的深浅通常用来表示数据的量值大小,颜色越深表示数值越高,反之则越低。这种图表非常适合展示地理信息、用户行为、科学测量等数据的分布情况。
3. 安装Seaborn库
要在Python
中创建heatmap
,可以使用Seaborn
库进行操作,该库建立在Matplotlib
库的基础之上。Seaborn
库提供了一个高级的数据可视化抽象接口方便我们可以绘制各种矩阵数据。
想要在代码中使用该库,一般通过pip命令进行该库的安装,如下:
pip install seaborn
运行结果如下:
4. 基本用法
好的,现在让我们创建一个热力图,首先让我们导入我们所需的库,如下:
import numpy as np
import seaborn as sb
import matplotlib.pyplot as plt
我们导入了numpy
模块,用以生成给定范围内的随机数数组,进而将该数组绘制为热力图。
data = np.random.rand(4, 6)
上述代码将创建一个2维数组,行数为4,列数为6;上述数组中的值表示用来画热力图的数值,接着我们将使用Seaborn
库中的heatmap
函数来绘制热力图,相应的绘制代码如下:
heat_map = sb.heatmap(data)
接着让我们使用matplotlib
库中的plt.show()
函数来展示上述热力图,如下:
plt.show()
运行后结果如下:
5.删除刻度标签
在数据可视化中,tick labels
刻度标签是指在图表中x
轴、y
轴上显示的标签值,用于指示轴上每个刻度的具体数值或类别。Seaborn
库在绘制热力图的时候默认会添加相应的刻度标签, 如果我们想要删除上述刻度标签我们可以通过设置xticklabel
或者yticklabel
的属性值来进行控制。代码如下:
heat_map = sb.heatmap(data, xticklabels=False, yticklabels=False)
plt.show()
运行后结果如下:
6. 设置x轴文本标签
我们可以使用Matplotlib
库中的pyplot.label
函数来为上述热力图添加x轴上的文本标签说明,代码如下:
heat_map = sb.heatmap(data)
plt.xlabel("Values on X axis")
plt.show()
运行后结果如下:
7. 删除y轴刻度标签
一般来说,Seaborn
库也默认在y轴上添加相应的刻度标签,我们可以通过设置yticklabels=False
,来实现保留x
轴上的默认刻度标签,仅删除y
轴上的刻度标签,代码如下:
heat_map = sb.heatmap(data, yticklabels=False)
plt.show()
运行后结果如下:
8.设置y轴文本标签
参考前面章节,我们也可以类似地使用Matplotlib
库中的pyplot.ylabel
来实现绘制热力图上y
轴的文本标签,代码如下:
data = np.random.rand(4, 6)
heat_map = sb.heatmap(data)
plt.ylabel('Values on Y axis')
plt.show()
运行后结果如下:
9. 设置热力图颜色
我们也可以通过使用heatmap
中的cmap
属性来通过改变调色板color map
进而实现更改seaborn
中绘制heatmap
的颜色。代码如下:
data = np.random.rand(4, 6)
heat_map = sb.heatmap(data,cmap="YlGnBu")
plt.show()
运行后结果如下:
10. 设置热力图网格显示数值
如果我们需要在heatmap
上显示具体的文本数值,我们可以使用heatmap
函数中的annot
参数控制。如果设置annot=True
, 则热力图上每个单元格会展示对应的文本数值。代码如下:
data = np.random.rand(4, 6)
heat_map = sb.heatmap(data, annot=True)
plt.show()
运行结果如下:
11. 调整显示字体大小
我们可以使用seaborn
的font_scale
属性来调整heatmap
显示文本中的字体大小,如下所示:
data = np.random.rand(4, 6)
sb.set(font_scale=2)
heat_map = sb.heatmap(data, annot=True)
plt.show()
增大显示文本字体大小后,热力图的效果如下所示:
12.控制热力图调色板
热力图中的调色板如下图中圆圈所示:
事实上,heatmap
函数中的参数cbar
是一个Bool
型变量,主要用来控制是否应该显示上述调色板。默认来说,上述变量设置为True
,表示默认在画热力图的时候会展示相应的调色板。我们也可以使用以下代码,来删除右侧图中的调色板,代码如下:
data = np.random.rand(4, 6)
sb.set(font_scale=2)
heat_map = sb.heatmap(data, annot=True,cbar=False)
plt.show()
运行后结果如下:
13. 调色板添加文本标签
为了给热力图中的调色板添加相应的文本标签,用来说明文字提示。我们一般使用变量参数cbar_kws
来控制,代码如下:
data = np.random.rand(4, 6)
heat_map = sb.heatmap(data, annot=True,
cbar_kws={'label': 'My Colorbar'})
plt.show()
运行后结果如下:
14. 调整调色板显示位置
参考上一章节,参数cbar_kws
除了控制为调色板添加自定义文本外,还可以控制调色板水平和垂直显示。虽然默认情况下,调色板为垂直显示,我们可以通过以下代码来控制水平显示调色板,代码如下:
data = np.random.rand(4, 6)
heat_map = sb.heatmap(data, annot=True,
cbar_kws={'label': 'My Colorbar',
'orientation': 'horizontal'})
plt.show()
运行后结果如下:
15. 自定义网格线
自定义Seaborn
热力图中的网格线可以增强数据可视化的可读性和美观性。调整线宽和线条颜色可以明显地分离数据点,使热力图更加直观和直观。我们可以调整分隔单元格的线条宽度,并改变它们的颜色,以使单元格之间的区别更加清晰。
data = np.random.rand(4, 6)
sns.heatmap(df, annot=True, cmap='coolwarm', linewidths=0.5, linecolor='black')
plt.show()
运行后结果如下:
上图中的热力图现在有更明显的网格线,单元格线宽为0.5,颜色为黑色,使每个单元格分离更加明显,数据更容易读取。
16. 自定义显示数据格式
观察上述在Seaborn
绘制的热力图中的小数,有的保留小数点后两位,有的为小数点后一位,看起来不太完美!
事实上,我们可以设置带四舍五入小数点的格式,一般通过在函数
heatmap
中使用fmt
参数控制。此参数允许大家指定格式化输出的字符串来控制输出格式。
例如,如果要显示四舍五入到小数点后两位的数字,可以使用fmt=".2f"
。代码如下:
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
np.random.seed(0)
data = pd.DataFrame(np.random.randn(10, 10))
corr = data.corr()
plt.figure(figsize=(10, 8))
sns.heatmap(corr, annot=True, fmt=".2f", cmap='coolwarm')
plt.show()
运行后结果如下:
17. 总结
本文重点介绍了在Python
中如何利用Seaborn
库来绘制热力图,用来直观的可视化数据的密度和分布,并详细介绍了不同参数控制下的可视化效果,并给出了相应的代码示例!
您学废了嘛!