📅  最后修改于: 2023-12-03 15:37:26.630000             🧑  作者: Mango
热图(heatmap)是一种很常用的可视化方式,它可以将大量数据可视化成颜色呈现。如果在这些数据中存在空值,一般会使用一些方式来填充空值。但是,有时候我们也需要将空值绘制出来。本文将介绍如何在 Python 中为空值绘制热图。
首先,我们需要准备一些数据。我们使用 Seaborn 提供的数据集 "flights",这个数据集包含了 1949 年到 1960 年间的航班数据,我们可以通过 Seaborn 的 heatmap 函数绘制出这些数据的热图。
import seaborn as sns
flights = sns.load_dataset("flights")
flights = flights.pivot("month", "year", "passengers")
sns.heatmap(flights, annot=True, fmt="d")
这段代码的作用是将数据集 "flights" 进行透视,然后将透视后的数据传给 Seaborn 的 heatmap 函数进行绘制。其中 annot=True
指定了要标注数值,fmt="d"
指定了数值以整数形式显示。
但是如果数据集中存在空值,我们就需要对空值进行特殊处理了。目前常用的方式是使用 np.nan 或 None 来表示空值。我们可以将数据集中一部分数据设置为 None 来演示如何绘制空值的热图:
import random
import numpy as np
import seaborn as sns
flights = sns.load_dataset("flights")
flights = flights.pivot("month", "year", "passengers")
# 随机将一部分数据设为 None
for year in flights.columns:
for month in flights.index:
if random.random() < 0.2:
flights[year][month] = None
sns.heatmap(flights.isnull(), cmap="viridis")
这段代码的作用是将数据集中随机选中的一部分数据设为 None,然后将这些 None 绘制出来。这里使用了 flights.isnull()
来标记哪些数据是空值。cmap 指定了空值使用什么颜色进行渲染,这里选用了 viridis。
如果我们想要在原热图的基础上将空值进行标注,可以使用 mask 属性来标记:
import random
import numpy as np
import seaborn as sns
flights = sns.load_dataset("flights")
flights = flights.pivot("month", "year", "passengers")
# 随机将一部分数据设为 None
for year in flights.columns:
for month in flights.index:
if random.random() < 0.2:
flights[year][month] = None
mask = flights.isnull()
sns.heatmap(flights, annot=True, fmt="d", mask=mask, cmap="viridis")
这段代码的作用是将数据集中随机选中的一部分数据设为 None,然后将这些 None 进行标注。这里使用了 mask 属性来指定哪些数据要进行标注,cmap 依然指定了空值使用什么颜色进行渲染。
以上就是在 Python 中为空值绘制热图的方法。当然,如果你不想手动处理空值,可以使用 pandas 或者 numpy 提供的方法进行处理,例如将空值填充为某个固定值。