跳转至

数据可视化

数据可视化是数据分析领域的关键技术,其核心价值在于将抽象数据转化为直观的认知图谱。数据可视化不仅是信息呈现工具,更是驱动决策的认知加速器。


考点一:matplotlib 基础绘图(原生绘图)

原生绘图一般指直接调用 plt.xxx()。
普通 .py 脚本最后要 plt.show();Jupyter 里通常可省略。

先统一导入:

import matplotlib.pyplot as plt
import numpy as np

1. plt.plot() 折线图

作用

画折线图,也可以画点、线组合。

基本写法

plt.plot(x, y, 'ro--', label='红色圆形虚线')
plt.title('折线图标题')
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.legend(loc='upper left')
plt.show()

格式字符串:'颜色 + 标记 + 线型'

例如:

'ro--'

含义:

部分 含义
r 红色 red
o 圆形标记
-- 虚线

常见线型:

写法 含义
- 实线
-- 虚线
-. 点划线
: 点线

常见颜色:

写法 颜色
r 红
g 绿
b 蓝
k 黑
y 黄
m 品红
c 青

常见标记:

写法 形状
o 圆点
s 方块
^ 上三角
* 星号
x 叉号

多张曲线画在同一张画布

x = [1, 2, 3, 4]
y1 = [1, 4, 9, 16]
y2 = [2, 3, 5, 8]

plt.plot(x, y1, label='曲线1')
plt.plot(x, y2, label='曲线2')
plt.legend()
plt.show()

不指定样式时,matplotlib 会自动分配颜色。

关键参数

参数 作用
label 图例文字,必须写在 plot() 里
plt.title() 总标题
plt.xlabel() X轴名称
plt.ylabel() Y轴名称
plt.legend() 显示图例
loc 图例位置,如 upper left、upper right
plt.show() 弹出绘图窗口

注意:
loc 只调图例位置,不能隐藏图例。

记忆短句

plot 设置线样式,label 写好图例名;
legend 调出图例看,show 命令弹出图;
多次 plot 画多线,默认配色做分辨;
legend 的 loc 调位置,xlabel 标记坐标轴;
title 设置图总标题,label 才是图例言。


2. plt.bar() 垂直柱状图 & plt.barh() 水平条形图

plt.bar(x, y) 垂直柱状图

  • x:横轴类别
  • y:纵轴数值,也就是柱子高度
  • x 可以直接传字符串分类标签,不需要转成数字
fruits = ['苹果', '香蕉', '橙子']
counts = [10, 15, 7]

plt.bar(fruits, counts)
plt.title('水果数量')
plt.xlabel('水果')
plt.ylabel('数量')
plt.show()

plt.barh(x, y) 水平条形图

barh 里的 h 是 horizontal,水平的意思。
坐标轴互换:

  • 纵轴:分类标签
  • 横轴:数值,也就是条的长度
fruits = ['苹果', '香蕉', '橙子']
counts = [10, 15, 7]

plt.barh(fruits, counts)
plt.title('水果数量')
plt.xlabel('数量')
plt.ylabel('水果')
plt.show()

注意:
bar 和 barh 的参数位置不能随意互换。
最直观理解:

  • bar(x, y):x 是类别,y 是高度
  • barh(x, y):x 是类别,y 是长度,但显示为水平条

记忆短句

bar 绘制柱状图,x 定横轴 y 定高;
文本类别直接用,无需转成数字标;
bar 竖直立,barh 横向延;
h 是 horizontal,坐标轴互换;
纵轴写分类,横轴记长短。


3. plt.scatter() 散点图

作用

看两个连续变量之间的关系。

x = [1, 2, 3, 4, 5]
y = [2, 4, 1, 5, 3]

plt.scatter(x, y, s=100, c='red', marker='o', alpha=0.6)
plt.title('散点图')
plt.xlabel('X')
plt.ylabel('Y')
plt.show()

参数

参数 作用
s 点大小
c 点颜色
marker 点形状
alpha 透明度,0 到 1,越小越透明

记忆短句

scatter 绘制散点图,
s 控制点的大小;
c 设置点的颜色,
marker 改外形,alpha 调透明。


4. plt.pie() 饼图

作用

展示各部分占总体比例。
原始数据总和不需要等于 100,会自动换算占比。

labels = ['A', 'B', 'C', 'D']
sizes = [15, 30, 45, 10]

plt.pie(sizes, labels=labels, autopct='%1.1f%%')
plt.title('饼图')
plt.show()

参数

参数 作用
labels 扇形外侧分类标签
autopct='%1.1f%%' 扇形内部显示百分比
%% 输出一个 %

%1.1f%% 的意思:

  • %1.1f:保留 1 位小数的浮点数
  • %%:显示一个百分号

例如显示:33.3%

记忆短句

pie 绘制饼状图,总和不用等于百;
labels 外侧标名称,autopct 内部显示百分比;
格式里面双百分号,输出单个 % 出来。


5. plt.hist() 直方图

和 bar() 的区别

图 数据类型 柱子之间
bar() 条形图 离散分类数据 一般留有空隙
hist() 直方图 连续数值,划分区间统计频次 一般无空隙

基本写法

data = np.random.randn(1000)

plt.hist(data, bins=30)
plt.title('直方图')
plt.xlabel('数值')
plt.ylabel('频数')
plt.show()

参数

参数 作用
bins 分组数量,也就是柱子数量,不是颜色
density=False 默认,纵轴为频数
density=True 纵轴为概率密度,全部柱子总面积 = 1
cumulative=True 开启累计

np.random.randn(1000)

生成 1000 个标准正态随机数。

data = np.random.randn(1000)

记忆短句

hist 绘制直方图,连续数值做分组;
bins 控制分组数,多组数据也可出;
对比 bar 条形图,分类空隙要记住;
randn 生成正态随机数,bins 设置分组数;
density False 计频数,True 之后看密度;
cumulative 才做累计数。


6. plt.boxplot() 箱线图(盒须图)

作用

分析数据分布,展示:

  • 中位数
  • 四分位数
  • 异常值

适合多组数据集对比分布。

多组数据对比

必须把多组数据放进列表:

data1 = [1, 2, 3, 4, 5, 100]
data2 = [2, 3, 4, 5, 6, 7]

plt.boxplot([data1, data2], labels=['组1', '组2'])
plt.title('箱线图')
plt.show()

注意:

  • 正确:[data1, data2]
  • 错误:data1 + data2,这样会合并成一组
  • 集合 {} 不能用作参数

参数

参数 作用
vert=True 默认,竖直箱线
vert=False 水平箱线
showmeans=True 显示均值,小三角标记
labels 给每组数据加类别标签

注意:

  • 箱体中间自带横线是中位数,不是均值。
  • showmeans=True 显示的是小三角标记点,不是直线。

适用场景

当题目需要:

  • 对比多类别下连续变量分布
  • 展示异常值

优先选箱线图。

对比:

  • 柱状图无法标记异常值
  • 饼图只看占比

记忆短句

boxplot 箱线看分布,多组对比列表护;
直接相加会合并,集合参数不可用;
vert 控制箱线横竖向,False 水平 True 竖直样;
showmeans 设为 True,均值标记三角上;
箱体中间原有线,它是中位数别忘;
多组连续比分布,异常数值要看露;
箱线 labels 标类别,直方条形做不到;
饼图只管占比数。


matplotlib 原生绘图函数汇总

函数 作用
plt.plot() 折线图
plt.bar() 垂直柱状图
plt.barh() 水平条形图
plt.scatter() 散点图
plt.pie() 饼图
plt.hist() 直方图,常用 bins、density
plt.boxplot() 箱线图

考点二:seaborn 高级绘图;子图与分面

先导入:

import seaborn as sns
import matplotlib.pyplot as plt

内置数据集:

tips = sns.load_dataset("tips")

7. plt.subplots() 手动创建子图

作用

在一张画布里手动划分多个子图。

fig, axes = plt.subplots(1, 2, figsize=(10, 4))

axes[0].plot([1, 2, 3], [1, 4, 9])
axes[0].set_title('左图')

axes[1].plot([1, 2, 3], [9, 4, 1])
axes[1].set_title('右图')

plt.show()

参数解释

参数 含义
1, 2 1 行 2 列
fig 整个画布
axes 子图数组
axes[0] 第一个子图
ax=axes[i] seaborn 绘图时指定画在哪张子图上

seaborn 绘图时:

sns.histplot(data=tips, x="total_bill", ax=axes[0])
sns.boxplot(data=tips, x="day", y="total_bill", ax=axes[1])

subplots 和 FacetGrid 区别

名称 作用
plt.subplots() 手动划分子图
FacetGrid seaborn 自动分面类

记忆短句

subplots 划分子画布,一行两列并排处;
ax 选定绘图坐标轴,两图分画各自处;
FacetGrid 自动分面,本题代码并未使用。


8. sns.histplot

作用

底层直方图绘图函数。
注意:不支持 row、col 分面参数。

sns.histplot(data=tips, x="total_bill", hue="sex", multiple="dodge", alpha=0.6)
plt.show()

参数

参数 作用
hue="字段名" 依据字段做颜色分组
multiple 多组数据展示方式
alpha 透明度,0 到 1,越小越透明

multiple 四个重点取值

取值 含义
layer 图层重叠,配合 alpha 设置透明度
stack 垂直上下堆叠
dodge 横向并列错开
fill 归一填充,柱子总高度固定为 1,展示占比

记忆短句

histplot 绘直方,hue 分组换颜色;
layer 图层相叠加,alpha 调透乐;
stack 上下摞起来,dodge 并排搁;
fill 归一占比图,四种取值要记得。


9. sns.boxplot(seaborn 版箱线图,hue 二次分组)

作用

画箱线图,并且可以用 hue 做二次分组。

sns.boxplot(x="day", y="total_bill", hue="sex", data=tips)
plt.show()

参数

参数 作用
x 一级大类
y 连续变量
hue 大类内部再次细分

适合分析:

两个分类变量对一个连续变量分布的影响。

对比其他 seaborn 图

图 作用
kdeplot 连续变量的密度曲线
scatterplot 分析两个连续变量之间的相关关系
boxplot 看分布、异常值、多组对比

记忆短句

boxplot 箱线察分布,x 分大类 hue 再组;
两分类看连续量,异常数值也可睹;
直方统计频次数;kde 绘制密度图;
散点专看两连续。


10. sns.displot(高层分面绘图)

作用

高层函数,支持分面。
用 kind 指定绘图类型。

sns.displot(data=tips, x="total_bill", col="sex", kind="hist")
plt.show()

参数

参数 作用
hue 颜色分组,全部绘制在同一个坐标轴,不生成新子图
col 横向分列分面,水平生成并排独立子图
row 纵向分行分面,竖直堆叠独立子图
kind="hist" 直方图
kind="kde" 核密度图

注意:
底层 histplot 不能使用 row、col 分面。

记忆短句

displot 可做分面图,col 横向 row 纵向驻;
hue 仅改换颜色,所有数据一图处;
histplot 底层绘图,row-col 参数不能用;
kind 选定图类型,hist 直方 kde 密度。


11. sns.jointplot 联合分布图

作用

中间绘制两个变量的联合关系;
上方、右侧自动生成边缘分布图,不需要手动建子图。

sns.jointplot(data=tips, x="total_bill", y="tip", kind="scatter")
plt.show()

kind 参数

取值 含义
scatter 默认联合散点
hex 六边形分箱密度图,适合样本量大、散点严重重叠
kde 二维核密度等高线
reg 附带线性拟合回归线

记忆短句

jointplot 做联合图,中间主图边缘附;
scatter 基础散点出;
hex 六边形解重叠;
kde 绘制等高线;
reg 画出回归线。


12. sns.relplot 高层关系绘图(分面)

作用

高层函数,支持 row / col 分面以及 hue 颜色分组。
底层 scatterplot、lineplot 不支持分面。

sns.relplot(data=tips, x="total_bill", y="tip", kind="scatter", col="sex", hue="smoker")
plt.show()

参数

参数 作用
kind="scatter" 散点图
kind="line" 折线图
col 横向分列
row 纵向分行
hue 颜色分组

审题要点:

  • 分列 → col
  • 分色 → hue
  • col 与 hue 可以同时使用

记忆短句

relplot 高层关系图,kind 选定线或散;
col 横向分列驻,row 纵向分行处;
hue 仅颜色做区分,子图并不生成;
底层 scatterplot 绘图,分面参数不可输。


13. sns.heatmap 热力图 & pandas 相关系数矩阵

计算相关系数矩阵

corr = tips.corr(numeric_only=True)
print(corr)

df.corr(numeric_only=True):

  • 只选取数值列
  • 计算皮尔逊相关系数矩阵
  • 自动忽略字符串分类字段

绘制热力图

sns.heatmap(corr, annot=True, fmt=".2f", cmap="coolwarm")
plt.show()

参数

参数 作用
annot=True 格子内部显示相关系数
fmt=".2f" 保留两位小数
cmap="coolwarm" 冷暖配色

颜色含义:

  • 红色:正相关
  • 蓝色:负相关

记忆短句

corr 求解相关矩阵,heatmap 绘制热力图;
annot 格子显数值,fmt 把控小数位数;
coolwarm 冷暖配色,正负相关颜色区分。


考点三:统计学基础考点


14. 正态分布与 3-Sigma 经验法则

正态分布两个参数

参数 作用
均值 控制曲线左右平移,中心位置
标准差 控制高矮胖瘦,离散程度

规律:

  • 标准差越大,数据越分散,曲线越扁平
  • 标准差越小,曲线越瘦高
  • 与样本量无关
  • 正态分布对称,均值 = 中位数 = 众数

经验法则:68-95-99.7

范围 包含数据比例
均值 ± 1 个标准差 约 68%
均值 ± 2 个标准差 约 95%
均值 ± 3 个标准差 约 99.7%

记忆短句

正态钟形有两参,均值平移定中间;
标准差管胖和瘦,均中众数值一般;
一二三倍西格玛,六八九五九九七。


15. 变量类型:名义(定类)、等级(定序)

名义变量(定类)

  • 仅区分类别
  • 无先后、大小顺序
  • 例子:性别、职业
  • 只能统计频次、百分比
  • 不可求均值、中位数

等级变量(定序)

  • 存在等级先后顺序
  • 但相邻等级间隔不相等
  • 没有统一度量单位
  • 例子:满意度评级 A/B/C
  • 同样不可以直接计算算术平均数

记忆短句

名义变量分类型,无序只算频与率;
等级变量有高低,间隔不等忌取均。


16. 描述统计指标

集中趋势:找中心

指标 适合场景
均值 容易受极端值干扰,连续变量优先
中位数 适合含极端值
众数 多用于分类

离中(离散)趋势:看波动分散

指标 含义
极差 max - min,稳定性差
方差 离散程度
标准差 离散程度,数值越大越分散

分布形态指标

指标 作用
偏度 判断左偏/右偏,对称性
峰度 判断曲线陡峭或扁平

频数统计指标

指标 含义
频次 出现次数
频率 频次 / 总数
百分比 频率 × 100%
累积频率 累加频率

多用于分类变量统计。

记忆短句

均值代表集中势,极差标准差离散;
偏度识别斜分布,三类指标记仔细;
均值中位与众数,找准数据集中处;
方差标准差离中,偏度峰度观形态;
频次频率算占比,分类数据派用处。


17. 统计报表:频次表、交叉表、汇总表

频次表(频数表)

  • 单个分类变量
  • 只做计数
  • 只有分类项 + 频次
  • 无独立度量部分

例子:

性别 频次
男 10
女 12

交叉表(列联表)

  • 处理两个及以上分类变量
  • 行、列设置不同分类维度
  • 单元格放频数

例子:

性别 是否吸烟 是 否
男 5 5
女 3 9

汇总表

  • 同时包含维度 + 度量
  • 度量可以是计数、均值、求和、最大最小值
  • 不局限于频次

例子:

班级 平均分
一班 85
二班 90

记忆短句

频次单类计数量,交叉两表相对望;
汇总维度加度量,均值频次皆可放。


最后:一张总表帮你区分最容易混的点

容易混的点 正确理解
label 和 title label 是图例文字,title 是总标题
legend 和 loc legend() 显示图例,loc 只调位置
bar 和 barh bar 竖直,barh 水平
bar 和 hist bar 分类数据有间隙,hist 连续数据分组
bins 直方图分组数量,不是颜色
density=True 纵轴概率密度,总面积 1
boxplot 多组数据 必须写成 [data1, data2]
箱体中间线 是中位数,不是均值
showmeans=True 显示均值,小三角
histplot 不支持 row、col 分面
displot 支持分面,col 横向,row 纵向
hue 和 col hue 只改颜色,不生成新子图;col 生成新子图
jointplot 中间主图,边缘自动分布图
relplot 高层关系图,支持 row、col、hue
heatmap 常配合 df.corr(numeric_only=True)
名义变量 无序,只算频次百分比
等级变量 有序,但间隔不等,不能直接算均值
正态分布 均值定中心,标准差定胖瘦
经验法则 68%、95%、99.7%

下面是 “考试速查版” 整理:
只保留 函数名 + 必考参数 + 一句话作用 + 记忆短句。
适合考前快速过一遍。


考点一:matplotlib 基础绘图

1. plt.plot()

  • 必考参数:label、plt.title()、plt.xlabel()、plt.ylabel()、plt.legend(loc=...)
  • 一句话作用:画折线图,可多次调用在同一画布画多条线。
  • 记忆短句:plot 设置线样式,label 写好图例名;legend 调出图例看,show 命令弹出图;多次 plot 画多线,默认配色做分辨;legend 的 loc 调位置,xlabel 标记坐标轴;title 设置图总标题,label 才是图例言。

2. plt.bar()

  • 必考参数:x 分类标签,y 数值高度
  • 一句话作用:画垂直柱状图,x 可直接用字符串类别。
  • 记忆短句:bar 绘制柱状图,x 定横轴 y 定高;文本类别直接用,无需转成数字标。

3. plt.barh()

  • 必考参数:x 分类标签,y 数值长度
  • 一句话作用:画水平条形图,坐标轴互换。
  • 记忆短句:bar 竖直立,barh 横向延;h 是 horizontal,坐标轴互换;纵轴写分类,横轴记长短。

4. plt.scatter()

  • 必考参数:x、y、s、c、marker、alpha
  • 一句话作用:画散点图,看两个连续变量关系。
  • 记忆短句:scatter 绘制散点图,s 控制点的大小;c 设置点的颜色,marker 改外形,alpha 调透明。

5. plt.pie()

  • 必考参数:labels、autopct='%1.1f%%'
  • 一句话作用:画饼图,展示各部分占比,总和不用等于 100。
  • 记忆短句:pie 绘制饼状图,总和不用等于百;labels 外侧标名称,autopct 内部显示百分比;格式里面双百分号,输出单个 % 出来。

6. plt.hist()

  • 必考参数:bins、density、cumulative
  • 一句话作用:画直方图,连续数值分组统计频次。
  • 记忆短句:hist 绘制直方图,连续数值做分组;bins 控制分组数,多组数据也可出;对比 bar 条形图,分类空隙要记住;randn 生成正态随机数,bins 设置分组数;density False 计频数,True 之后看密度;cumulative 才做累计数。

7. plt.boxplot()

  • 必考参数:[data1, data2]、vert、showmeans、labels
  • 一句话作用:画箱线图,看分布、四分位数、异常值,适合多组对比。
  • 记忆短句:boxplot 箱线看分布,多组对比列表护;直接相加会合并,集合参数不可用;vert 控制箱线横竖向,False 水平 True 竖直样;showmeans 设为 True,均值标记三角上;箱体中间原有线,它是中位数别忘;多组连续比分布,异常数值要看露;箱线 labels 标类别,直方条形做不到;饼图只管占比数。

matplotlib 原生绘图函数汇总

函数 一句话作用
plt.plot() 折线图
plt.bar() 垂直柱状图
plt.barh() 水平条形图
plt.scatter() 散点图
plt.pie() 饼图
plt.hist() 直方图
plt.boxplot() 箱线图

考点二:seaborn 高级绘图;子图与分面

8. plt.subplots()

  • 必考参数:1, 2、figsize、axes[i]、ax=axes[i]
  • 一句话作用:手动创建多个子图,seaborn 用 ax= 指定画在哪张子图。
  • 记忆短句:subplots 划分子画布,一行两列并排处;ax 选定绘图坐标轴,两图分画各自处;FacetGrid 自动分面,本题代码并未使用。

9. sns.histplot

  • 必考参数:hue、multiple、alpha
  • 一句话作用:底层直方图,不支持 row、col 分面。
  • 记忆短句:histplot 绘直方,hue 分组换颜色;layer 图层相叠加,alpha 调透乐;stack 上下摞起来,dodge 并排搁;fill 归一占比图,四种取值要记得。

10. sns.boxplot

  • 必考参数:x、y、hue、data
  • 一句话作用:seaborn 箱线图,hue 做二次分组。
  • 记忆短句:boxplot 箱线察分布,x 分大类 hue 再组;两分类看连续量,异常数值也可睹;直方统计频次数;kde 绘制密度图;散点专看两连续。

11. sns.displot

  • 必考参数:hue、col、row、kind
  • 一句话作用:高层分面绘图,col 横向分面,row 纵向分面。
  • 记忆短句:displot 可做分面图,col 横向 row 纵向驻;hue 仅改换颜色,所有数据一图处;histplot 底层绘图,row-col 参数不能用;kind 选定图类型,hist 直方 kde 密度。

12. sns.jointplot

  • 必考参数:x、y、kind
  • 一句话作用:联合分布图,中间主图,边缘自动生成分布图。
  • 记忆短句:jointplot 做联合图,中间主图边缘附;scatter 基础散点出;hex 六边形解重叠;kde 绘制等高线;reg 画出回归线。

13. sns.relplot

  • 必考参数:kind、col、row、hue
  • 一句话作用:高层关系绘图,支持分面与颜色分组。
  • 记忆短句:relplot 高层关系图,kind 选定线或散;col 横向分列驻,row 纵向分行处;hue 仅颜色做区分,子图并不生成;底层 scatterplot 绘图,分面参数不可输。

14. sns.heatmap

  • 必考参数:annot=True、fmt=".2f"、cmap="coolwarm"
  • 一句话作用:画热力图,常配合 df.corr(numeric_only=True)。
  • 记忆短句:corr 求解相关矩阵,heatmap 绘制热力图;annot 格子显数值,fmt 把控小数位数;coolwarm 冷暖配色,正负相关颜色区分。

考点三:统计学基础考点

15. 正态分布与 3-Sigma 经验法则

  • 必考参数:均值、标准差
  • 一句话作用:均值定中心,标准差定胖瘦;68%、95%、99.7%。
  • 记忆短句:正态钟形有两参,均值平移定中间;标准差管胖和瘦,均中众数值一般;一二三倍西格玛,六八九五九九七。

16. 变量类型:名义、等级

  • 必考参数:名义(定类)、等级(定序)
  • 一句话作用:名义无序只算频次;等级有序但间隔不等,不能直接算均值。
  • 记忆短句:名义变量分类型,无序只算频与率;等级变量有高低,间隔不等忌取均。

17. 描述统计指标

  • 必考参数:均值、中位数、众数、极差、方差、标准差、偏度、峰度、频次、频率
  • 一句话作用:集中趋势找中心,离散趋势看波动,偏度峰度看形态,频数频率算占比。
  • 记忆短句:均值代表集中势,极差标准差离散;偏度识别斜分布,三类指标记仔细;均值中位与众数,找准数据集中处;方差标准差离中,偏度峰度观形态;频次频率算占比,分类数据派用处。

18. 统计报表:频次表、交叉表、汇总表

  • 必考参数:频次、维度、度量
  • 一句话作用:频次表单分类计数;交叉表两分类交叉;汇总表维度 + 度量。
  • 记忆短句:频次单类计数量,交叉两表相对望;汇总维度加度量,均值频次皆可放。

考前最后 10 条最容易混的点

  1. label 是图例文字,title 是总标题。
  2. legend() 显示图例,loc 只调位置。
  3. bar 竖直,barh 水平。
  4. bar 分类有间隙,hist 连续无间隙。
  5. bins 是分组数,不是颜色。
  6. density=True 纵轴是密度,总面积 = 1。
  7. boxplot 多组数据必须写成 [data1, data2]。
  8. 箱体中间线是中位数,不是均值。
  9. histplot 不能 row、col 分面;displot 可以。
  10. hue 只改颜色,不生成新子图;col、row 才生成子图。