前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关系(二)利用python绘制热图

关系(二)利用python绘制热图

作者头像
HsuHeinrich
发布2024-04-11 20:16:29
1170
发布2024-04-11 20:16:29
举报
文章被收录于专栏:HsuHeinrichHsuHeinrich

关系(二)利用python绘制热图

热图 (Heatmap)简介

1

热图适用于显示多个变量之间的差异,通过颜色判断彼此之间是否存在相关性。

快速绘制

基于seaborn

代码语言:javascript
复制
import seaborn as sns
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl

# 自定义数据
df = pd.DataFrame(np.random.random((5,5)), columns=["a","b","c","d","e"])

# 利用seaborn的heatmap函数创建
sns.heatmap(df)

plt.show()

2

定制多样化的热图

自定义热图一般是结合使用场景对相关参数进行修改,并辅以其他的绘图知识。参数信息可以通过官网进行查看,其他的绘图知识则更多来源于实战经验,大家不妨将接下来的绘图作为一种学习经验,以便于日后总结。

seaborn主要利用heatmap绘制热图,可以通过seaborn.heatmap[1]了解更多用法

不同输入格式的热图

代码语言:javascript
复制
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
import pandas as pd
np.random.seed(0)

sns.set(font='SimHei', font_scale=0.8, style="white") # 解决Seaborn中文显示问题

# 初始化
fig = plt.figure(figsize=(12,8))

# 宽型:是一个矩阵,其中每一行都是一个个体,每一列都是一个观察值。即热图的每个方块代表一个单元格
df = pd.DataFrame(np.random.random((6,5)), columns=["a","b","c","d","e"])

ax = plt.subplot2grid((2, 2), (0, 0), colspan=1)
sns.heatmap(df)
ax.set_title('宽型')

# 方型:相关矩阵热图
df = pd.DataFrame(np.random.random((100,5)), columns=["a","b","c","d","e"]) 
corr_matrix=df.corr() # 计算相关矩阵

ax = plt.subplot2grid((2, 2), (0, 1), colspan=1)
sns.heatmap(corr_matrix)
ax.set_title('方型')

# 方型:对角矩阵
df = pd.DataFrame(np.random.random((100,5)), columns=["a","b","c","d","e"]) 
corr_matrix=df.corr() # 计算相关矩阵
mask = np.zeros_like(corr_matrix)
mask[np.triu_indices_from(mask)] = True # 生成上三角蒙版

ax = plt.subplot2grid((2, 2), (1, 0), colspan=1)
sns.heatmap(corr_matrix, mask=mask, square=True)
ax.set_title('方型-对角矩阵')

# 长型:每一行代表一个观测结果,输入三个变量(x,y,z)
people = np.repeat(("A","B","C","D","E"),5)
feature = list(range(1,6))*5
value = np.random.random(25)
df = pd.DataFrame({'feature': feature, 'people': people, 'value': value })
# 数据透视
df_wide = df.pivot_table( index='people', columns='feature', values='value') 

ax = plt.subplot2grid((2, 2), (1, 1), colspan=1)
sns.heatmap(df_wide)
ax.set_title('长型')

fig.tight_layout() # 自动调整间距
plt.show()

3

自定热图

代码语言:javascript
复制
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
import pandas as pd
np.random.seed(0)

sns.set(font='SimHei', font_scale=0.8, style="white") # 解决Seaborn中文显示问题

# 自定义数据
df = pd.DataFrame(np.random.random((10,10)), columns=["a","b","c","d","e","f","g","h","i","j"])

# 初始化
fig = plt.figure(figsize=(9,8))

# 显示值标签
ax = plt.subplot2grid((3, 2), (0, 0), colspan=1)
sns.heatmap(df, annot=True, annot_kws={"size": 7})
ax.set_title('显示值标签')

# 自定义网格线
ax = plt.subplot2grid((3, 2), (0, 1), colspan=1)
sns.heatmap(df, linewidths=2, linecolor='yellow')
ax.set_title('自定义网格线')

# 移除x、y或者颜色bar
ax = plt.subplot2grid((3, 2), (1, 0), colspan=1)
sns.heatmap(df, yticklabels=False, cbar=False)
ax.set_title('移除部分轴元素')

# 减少标签数量
ax = plt.subplot2grid((3, 2), (1, 1), colspan=1)
sns.heatmap(df, xticklabels=4)
ax.set_title('减少标签数量')

# 指定中心值
ax = plt.subplot2grid((3, 2), (2, 0), colspan=1)
sns.heatmap(df, center=1)
ax.set_title('指定中心值')

# 指定颜色
ax = plt.subplot2grid((3, 2), (2, 1), colspan=1)
sns.heatmap(df, cmap="YlGnBu")
ax.set_title('指定颜色')


fig.tight_layout() # 自动调整间距
plt.show()

4

数据标准化

代码语言:javascript
复制
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
import pandas as pd
np.random.seed(0)

sns.set(font='SimHei', font_scale=0.8, style="white") # 解决Seaborn中文显示问题

# 自定义数据
df = pd.DataFrame(np.random.randn(10,10) * 4 + 3)
# 列含异常值与标准化
df_col = df.copy()
df_col[1]=df_col[1]+40 # 构造异常数据点
df_norm_col=(df_col-df_col.mean())/df_col.std() # 按列标准化
# 行含异常值与标准化
df_row = df.copy()
df_row.iloc[2]=df_row.iloc[2]+40 # 构造异常数据点
df_norm_row = df_row.apply(lambda x: (x-x.mean())/x.std(), axis = 1) # 按行标准化


# 初始化
fig = plt.figure(figsize=(12,8))

# 列含异常数据
ax = plt.subplot2grid((2, 2), (0, 0), colspan=1)
sns.heatmap(df_col, cmap='viridis')
ax.set_title('列含异常数据')

# 按列标准化
ax = plt.subplot2grid((2, 2), (0, 1), colspan=1)
sns.heatmap(df_norm_col, cmap='viridis')
ax.set_title('按列标准化')

# 行含异常数据
ax = plt.subplot2grid((2, 2), (1, 0), colspan=1)
sns.heatmap(df_row, cmap='viridis')
ax.set_title('行含异常数据')

# 按行标准化
ax = plt.subplot2grid((2, 2), (1, 1), colspan=1)
sns.heatmap(df_norm_col, cmap='viridis')
ax.set_title('按行标准化')


fig.tight_layout() # 自动调整间距
plt.show()

5

引申-聚类热图

可以通过seaborn.clustermap[2]了解更多用法

代码语言:javascript
复制
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
import pandas as pd

# 导入数据
df = pd.read_csv('https://raw.githubusercontent.com/holtzy/The-Python-Graph-Gallery/master/static/data/mtcars.csv')
df = df.set_index('model')

# 基本聚类热图
g = sns.clustermap(df, standard_scale=1) # 标准化处理

plt.show()

5

总结

以上通过seaborn的heatmap快速绘制热图,并通过修改参数或者辅以其他绘图知识自定义各种各样的热图来适应相关使用场景。

共勉~

参考资料

[1]

seaborn.heatmap: https://seaborn.pydata.org/generated/seaborn.heatmap.html

[2]

seaborn.clustermap: https://seaborn.pydata.org/generated/seaborn.clustermap.html

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-04-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 HsuHeinrich 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 关系(二)利用python绘制热图
    • 热图 (Heatmap)简介
      • 快速绘制
        • 定制多样化的热图
          • 总结
            • 参考资料
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档