1. seaborn相关热图的介绍
Seaborn是Python数据可视化库之一,其基于matplotlib,用于创建各种各样的统计图形,包括热图。热图也叫做热力图,是一种基于色彩变化显示数据变化的图表。在热图中,颜色可以表示数值的大小,通过颜色深浅的变化可以让我们更加直观地观察数据的变化趋势。
2. seaborn热图的创建
2.1 热图数据的准备
要创建一张热图,首先需要准备好数据。我们以iris数据为例,下面是用pandas读取iris数据的代码:
import seaborn as sns
import pandas as pd
iris = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data",
names=["sepal_length", "sepal_width", "petal_length", "petal_width", "class"])
print(iris.head())
这样,我们就可以得到一份包含四个特征和一个类别的iris数据。接下来,我们需要将这份数据转化为一个二维数据集,以便绘制热图。
在本例中,我们可以使用pivot方法将数据转化为一个二维数据集。下面是代码:
# 将iris数据按照class进行分组,并将四个特征的平均值计算出来
grouped = iris.groupby('class').mean()
# 将数据转换为二维数据集
data = grouped.reset_index().melt(id_vars=['class'], var_name='feature', value_name='value')
print(data.head())
上面的代码中,我们先将数据按照class进行分组,然后计算每个类别下的四个特征的平均值,接着将数据转化为二维数据集。
2.2 热图的绘制
有了热图所需要的数据,接下来我们就可以使用seaborn绘制热图了。下面是代码:
# 绘制热图
sns.set_theme(style="whitegrid")
sns.heatmap(data.pivot("feature", "class", "value"),
cmap="YlGnBu",
annot=True,
fmt=".2f")
在上面的代码中,我们使用了seaborn的heatmap函数。其中,pivot方法将数据转化为二维数组,就像一个Excel表格那样,"feature"对应列名,"class"对应行名,"value"对应数据。cmap参数指定了使用的颜色,而annot和fmt参数则指定了是否在格子中显示对应的数据。
通过上面的代码,我们就可以得到如下的热图:
![seaborn 热图](https://img-blog.csdn.net/20170626165646583?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2lzaGllbG9jYWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/85)
从上面的热图中,我们可以很直观地看出不同类别在各个特征上的表现,例如:setosa类别在萼片长度、萼片宽度、花瓣长度、花瓣宽度上表现都比较明显,而versicolor类别在萼片宽度、花瓣长度、花瓣宽度上表现较差。
3. seaborn热图的进阶使用
除了上面的基本用法之外,seaborn热图还有很多进阶用法,例如:设置边框线条类型、更改坐标轴标签文字、调整字体大小等等。下面,我们将针对这些方面逐一介绍。
3.1 设置边框线条类型
在默认情况下,seaborn的热图上会有黑色的边框线,如果我们想要更改边框线的样式,可以通过linewidths和linecolor参数进行设置。下面是代码:
# 绘制热图并设置边框线条
sns.set_theme(style="whitegrid")
sns.heatmap(data.pivot("feature", "class", "value"),
cmap="YlGnBu",
annot=True,
fmt=".2f",
linewidths=.5,
linecolor='gray')
通过上面的代码,我们可以得到如下的热图:
![seaborn 热图](https://img-blog.csdn.net/20170626170222241?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2lzaGllbG9jYWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/85)
从上面的热图中,我们可以看到黑色边框线条已经被修改了。
3.2 更改坐标轴标签文字
在绘制热图时,seaborn默认使用数据集中的特征名作为横坐标的标签,使用类别名作为纵坐标的标签。如果我们想要更改这些标签的文字,可以使用set_xticklabels和set_yticklabels函数进行修改。下面是代码:
# 绘制热图并更改坐标轴标签文字
sns.set_theme(style="whitegrid")
ax = sns.heatmap(data.pivot("feature", "class", "value"),
cmap="YlGnBu",
annot=True,
fmt=".2f")
ax.set_xticklabels(ax.get_xticklabels(), rotation=45, horizontalalignment='right')
ax.set_yticklabels(ax.get_yticklabels(), rotation=0, horizontalalignment='right')
通过上面的代码,我们可以得到如下的热图:
![seaborn 热图](https://img-blog.csdn.net/20170626170826128?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2lzaGllbG9jYWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/85)
从上面的热图中,我们可以看到横坐标和纵坐标的标签文字已经被修改了,并且将横坐标的角度设置为了45度,将纵坐标的角度设置为了0度。
3.3 调整字体大小
在seaborn绘制的热图中,字体大小和样式也是需要调整的。如果我们想要调整字体大小,可以使用font_scale参数进行设置。下面是代码:
# 绘制热图并调整字体大小
sns.set_theme(style="whitegrid")
sns.set(font_scale=1.2)
sns.heatmap(data.pivot("feature", "class", "value"),
cmap="YlGnBu",
annot=True,
fmt=".2f")
通过上面的代码,我们可以得到如下的热图:
![seaborn 热图](https://img-blog.csdn.net/20170626171506797?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2lzaGllbG9jYWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/85)
从上面的热图中,我们可以看到字体大小已经被调整为了1.2倍。
4. 总结
本文中,我们介绍了如何使用seaborn绘制热图,并且详细介绍了热图的数据准备和绘制、边框线条类型的设置、坐标轴标签文字的更改以及字体大小的调整等方面。对于数据分析和可视化方面需要的同学,seaborn的热图是一个十分有用的工具,可以帮助我们更加直观地观察数据的变化趋势。