python数据可视化(8)——绘制热力图

课程学习来源:b站up:【蚂蚁学python】
【课程链接:【【数据可视化】Python数据图表可视化入门到实战】
【课程资料链接:【链接】】

python:3.12.3
所有库都使用最新版。
直接使用视频课程的代码可能无法正常运行显示出图片,本专栏的学习对代码进行了一定程度的补充以满足当前最新的环境。

Python绘制热力图查看两个分类变量之间的强度分布

热力图(heat map)

热力图(或者色块),由小色块组成的二维图表,其中:

  • x、y轴可以是分类变量,对应的小方块由连续数值表示颜色强度
  • 即,用两个分类字段确定数值的位置,用于展示数据的分布情况
import pandas as pd 
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

sns.set() # 设置默认样式
sns.set_style("whitegrid", {"font.sans_serif":["simhei", "Arial"]}) # 白色单线格,且展示中文
sns.set(font="simhei")#遇到标签需要汉字的可以在绘图前加上这句

实例1:绘制北京景区热度图

df = pd.DataFrame(
    np.random.rand(4,7),
    index = ["天安门","故宫","森林公园","8达岭长城"],
    columns = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"]
)

df
MonTueWedThuFriSatSun
天安门0.8797820.9770700.0391450.5529470.1671430.2632710.037447
故宫0.9676030.4199680.5684610.4197400.6274850.9990790.501211
森林公园0.1713580.0719100.3111290.8327360.0943370.0430860.644590
8达岭长城0.1386460.8368210.1196270.6138120.5450480.1714460.131791
plt.figure(figsize=(10,4))
sns.heatmap(df, annot=True, fmt=".4f", cmap = "coolwarm")

<Axes: >

在这里插入图片描述

实例2:绘制泰坦尼克事件与存亡变量的关系

# 读取并合并泰坦尼克数据
df = pd.concat(# concat实现按行合并
    [
        pd.read_csv("../DATA_POOL/PY_DATA/ant-learn-visualization-master/datas/titanic/titanic_train.csv"),
        pd.read_csv("../DATA_POOL/PY_DATA/ant-learn-visualization-master/datas/titanic/titanic_test.csv")
    ]
)
df.head()
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
010.03Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
121.01Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
231.03Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS
341.01Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
450.03Allen, Mr. William Henrymale35.0003734508.0500NaNS
df.info()
<class 'pandas.core.frame.DataFrame'>
Index: 1309 entries, 0 to 417
Data columns (total 12 columns):
 #   Column       Non-Null Count  Dtype  
---  ------       --------------  -----  
 0   PassengerId  1309 non-null   int64  
 1   Survived     891 non-null    float64
 2   Pclass       1309 non-null   int64  
 3   Name         1309 non-null   object 
 4   Sex          1309 non-null   object 
 5   Age          1046 non-null   float64
 6   SibSp        1309 non-null   int64  
 7   Parch        1309 non-null   int64  
 8   Ticket       1309 non-null   object 
 9   Fare         1308 non-null   float64
 10  Cabin        295 non-null    object 
 11  Embarked     1307 non-null   object 
dtypes: float64(3), int64(4), object(5)
memory usage: 132.9+ KB
# pandas 把字符串类型的列,变成分类数字编码
for field in ["Sex", "Cabin", "Embarked"]:
    df[field] = df[field].astype("category").cat.codes
df.info()
<class 'pandas.core.frame.DataFrame'>
Index: 1309 entries, 0 to 417
Data columns (total 12 columns):
 #   Column       Non-Null Count  Dtype  
---  ------       --------------  -----  
 0   PassengerId  1309 non-null   int64  
 1   Survived     891 non-null    float64
 2   Pclass       1309 non-null   int64  
 3   Name         1309 non-null   object 
 4   Sex          1309 non-null   int8   
 5   Age          1046 non-null   float64
 6   SibSp        1309 non-null   int64  
 7   Parch        1309 non-null   int64  
 8   Ticket       1309 non-null   object 
 9   Fare         1308 non-null   float64
 10  Cabin        1309 non-null   int16  
 11  Embarked     1309 non-null   int8   
dtypes: float64(3), int16(1), int64(4), int8(2), object(2)
memory usage: 107.4+ KB
df.head(3)
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
010.03Braund, Mr. Owen Harris122.010A/5 211717.2500-12
121.01Cumings, Mrs. John Bradley (Florence Briggs Th...038.010PC 1759971.28331060
231.03Heikkinen, Miss. Laina026.000STON/O2. 31012827.9250-12
# 计算不同变量之间两两的相关系数
num_cols = df.select_dtypes(include=[np.number]).columns
# num_cols选中数字类型的数据列进行计算

df[num_cols].corr()
PassengerIdSurvivedPclassSexAgeSibSpParchFareCabinEmbarked
PassengerId1.000000-0.005007-0.0383540.0134060.028814-0.0552240.0089420.031428-0.012096-0.048530
Survived-0.0050071.000000-0.338481-0.543351-0.077221-0.0353220.0816290.2573070.277885-0.176509
Pclass-0.038354-0.3384811.0000000.124617-0.4081060.0608320.018322-0.558629-0.5344830.192867
Sex0.013406-0.5433510.1246171.0000000.063645-0.109609-0.213125-0.185523-0.1263670.104818
Age0.028814-0.077221-0.4081060.0636451.000000-0.243699-0.1509170.1787400.190984-0.089292
SibSp-0.055224-0.0353220.060832-0.109609-0.2436991.0000000.3735870.160238-0.0056850.067802
Parch0.0089420.0816290.018322-0.213125-0.1509170.3735871.0000000.2215390.0295820.046957
Fare0.0314280.257307-0.558629-0.1855230.1787400.1602380.2215391.0000000.340217-0.241442
Cabin-0.0120960.277885-0.534483-0.1263670.190984-0.0056850.0295820.3402171.000000-0.126482
Embarked-0.048530-0.1765090.1928670.104818-0.0892920.0678020.046957-0.241442-0.1264821.000000
plt.figure(figsize = (12,6))
plt.rcParams['font.family'] = 'Arial' # 确保'-'号正常显示
sns.heatmap(df[num_cols].corr(), annot=True, fmt=".2f", cmap="coolwarm")
<Axes: >

在这里插入图片描述

要在Python中实现热力,可以使用seaborn库中的heatmap函数。该函数可以展示一组变量的相关系数矩阵或数据分布,并通过颜色表示数值的大小差异。以下是一些常用参数: 1. data: 矩阵数据集,可以是numpy的数组或pandas的DataFrame。如果是DataFrame,那么index和columns信息会分别对应到热力的行标和列标。 2. vmin和vmax: 指定颜色映射的值域范围。默认值是None。 3. cmap: 指定颜色映射的颜色样式。默认值是None。 4. cbar: 是否在热力侧边绘制颜色刻度条。默认值是True。 5. cbar_kws: 热力侧边绘制颜色刻度条时的相关字体设置。默认值是None。 6. cbar_ax: 热力侧边绘制颜色刻度条时的刻度条位置设置。默认值是None。 7. square: 设置热力矩阵小块的形状是否为正方形。默认值是False。 具体使用方法如下: import seaborn as sns import matplotlib.pyplot as plt # 创建一个矩阵数据集 data = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] # 绘制热力 sns.heatmap(data) # 显示形 plt.show() 这段代码会根据data中的数值绘制出相应的热力。你也可以根据需要对参数进行调整,以满足你的需求。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [python热力实现](https://blog.csdn.net/qq_42532598/article/details/120857608)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鸥梨菌Honevid

心想事成

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值