2026-06-14-数据可视化 Vol.3 可视化库

1017 个字
5 分钟
2026-06-14-数据可视化 Vol.3 可视化库

matplotlib / Seaborn#

主要是下面六块


一、全局配置区#

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # ① 中文字体
plt.rcParams['axes.unicode_minus'] = False # ② 负号正常显示
plt.rcParams['figure.figsize'] = (8, 5) # ③ 默认画布尺寸
plt.rcParams['figure.dpi'] = 100 # ④ 分辨率
位置答案解释口径
plt.rcParams['___']font.sans-serif设置无衬线字体族,用于显示中文
= ['___']SimHei / Microsoft YaHei黑体/雅黑,Windows 自带中文字体
plt.rcParams['axes.unicode_minus'] = ___False关闭 Unicode 负号,避免负号显示为方块

二、Figure / Axes 创建区#

单图

fig, ax = plt.subplots(figsize=(8, 5), dpi=100)

多子图

fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(10, 8))
axes[0, 0].plot(...) # 索引访问
axes[1, 1].bar(...)
plt.tight_layout() # 自动调整子图间距,防止标签重叠

老写法

plt.figure(figsize=(8, 5))
plt.subplot(2, 2, 1) # 2行2列第1个

为什么用 fig, ax = plt.subplots() 而不是 plt.plot()

答:面向对象写法可精确控制每个 Axes,便于多子图、嵌入 GUI、与 Seaborn 协作。


三、坐标轴与刻度区#

ax.set_xlabel('时间', fontsize=12)
ax.set_ylabel('数值', fontsize=12)
ax.set_title('图表标题', fontsize=14, fontweight='bold')
ax.set_xlim(0, 100)
ax.set_ylim(0, 1)
ax.set_xticks([0, 25, 50, 75, 100])
ax.set_xticklabels(['一月', '二月', '三月', '四月', '五月'])
ax.tick_params(axis='x', rotation=45, labelsize=10, colors='gray')
ax.spines['top'].set_visible(False) # 去顶边框
ax.spines['right'].set_visible(False) # 去右边框
ax.grid(True, linestyle='--', alpha=0.3)
ax.legend(loc='upper right', frameon=False)
挖空答案一句话解释
ax.___('时间')set_xlabel设置 x 轴标签
ax.tick_params(axis='x', ___=45)rotation刻度文字旋转 45°
ax.spines['top'].___(False)set_visible隐藏顶部坐标轴边框
ax.legend(loc='___')best / upper right图例放在最合适位置

四、十大图型最小模板#

# 1. 柱形图
ax.bar(x, y, color='#3A86FF', width=0.6, edgecolor='black')
# 2. 横向条形图
ax.barh(y, x)
# 3. 直方图
ax.hist(data, bins=20, density=False, edgecolor='black')
# 4. 箱线图
ax.boxplot(data, labels=['A','B','C'], showfliers=True, notch=False)
# 5. 散点图
ax.scatter(x, y, c=colors, s=sizes, alpha=0.6, cmap='viridis')
# 6. 气泡图(散点的s参数映射第三维)
ax.scatter(x, y, s=z*100, c=z, cmap='coolwarm')
# 7. 折线图
ax.plot(x, y, color='red', linestyle='--', linewidth=2, marker='o', label='系列A')
# 8. 面积图
ax.fill_between(x, y1, y2, alpha=0.3, color='skyblue')
# 9. 主题河流图
ax.stackplot(x, y1, y2, y3, labels=['A','B','C'], baseline='wiggle')
# 10. 玫瑰图 / 雷达图(极坐标)
fig, ax = plt.subplots(subplot_kw={'projection': 'polar'})
ax.bar(theta, r, width=2*np.pi/N) # 玫瑰图
ax.fill(angles, values, alpha=0.25) # 雷达图填充
  • ax.bar(x, y, ___=0.6)width
  • ax.hist(data, ___=20)bins
  • ax.scatter(x, y, ___=sizes)s(点大小,气泡图核心)
  • ax.plot(..., ___='o')marker
  • ax.stackplot(..., ___='wiggle')baseline(河流图居中堆叠的关键)
  • subplot_kw={'projection': '___'}polar(玫瑰/雷达必考)

五、颜色与 colormap#

# 三种颜色写法
color='red' # 命名
color='#FF5733' # 十六进制
color=(0.2, 0.4, 0.6) # RGB 元组(0–1)
# 常用 cmap
cmap='viridis' # 默认推荐,色盲友好
cmap='coolwarm' # 双向(正负数据、相关系数)
cmap='RdYlBu_r' # 反向加 _r
cmap='hot' # 热力图风格
# 加 colorbar
sc = ax.scatter(x, y, c=z, cmap='viridis')
plt.colorbar(sc, ax=ax, label='强度')

_r 后缀含义?→ reversed,颜色顺序反转。


六、Seaborn#

import seaborn as sns
sns.set_theme(style='whitegrid', palette='deep')
# 必背六图
sns.barplot(x='cat', y='val', data=df, ax=ax)
sns.boxplot(x='group', y='val', data=df, hue='gender')
sns.violinplot(x='group', y='val', data=df, split=True)
sns.histplot(data=df, x='val', bins=30, kde=True)
sns.scatterplot(x='x', y='y', size='z', hue='label', data=df)
sns.heatmap(corr, annot=True, fmt='.2f', cmap='coolwarm', vmin=-1, vmax=1)
sns.lineplot(x='time', y='val', hue='series', data=df)
sns.pairplot(df, hue='label') # Figure-level,自动建多子图
挖空答案解释
sns.heatmap(corr, ___=True)annot在格子里显示数值
sns.heatmap(..., ___='.2f')fmt数值格式,保留两位小数
sns.histplot(..., ___=True)kde叠加核密度曲线
sns.scatterplot(..., ___='z')size用 z 列控制点大小
sns.set_theme(style='___')whitegrid白底带网格主题

Seaborn 和 matplotlib 关系?→ Seaborn 是 matplotlib 的高级封装,返回的仍是 ax 对象,可继续用 matplotlib 的 API 微调。


七、收尾区#

plt.tight_layout() # 自动调整布局,防止裁切
plt.savefig('out.png', dpi=300, bbox_inches='tight') # 保存高清图
plt.show()
挖空答案解释
plt.___()tight_layout自动调整子图间距
plt.savefig(..., ___='tight')bbox_inches裁掉多余白边
plt.savefig(..., dpi=___)300出版级分辨率

八、模板#

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# ===== 1. 全局配置 =====
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# ===== 2. 数据 =====
x = np.arange(10)
y = np.random.rand(10)
# ===== 3. 画布与子图 =====
fig, ax = plt.subplots(figsize=(8, 5), dpi=100)
# ===== 4. 主图 =====
ax.plot(x, y, color='#3A86FF', marker='o', linewidth=2, label='系列A')
# ===== 5. 坐标轴美化 =====
ax.set_xlabel('时间', fontsize=12)
ax.set_ylabel('数值', fontsize=12)
ax.set_title('示例图', fontsize=14)
ax.tick_params(axis='x', rotation=30, labelsize=10)
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.legend(loc='best', frameon=False)
ax.grid(True, linestyle='--', alpha=0.3)
# ===== 6. 收尾 =====
plt.tight_layout()
plt.savefig('demo.png', dpi=300, bbox_inches='tight')
plt.show()

  1. 极坐标 → projection='polar',玫瑰图/雷达图必考点。
  2. 相关系数矩阵 → sns.heatmap(..., annot=True, cmap='coolwarm')
  3. 多组对比 → hue= 参数(Seaborn)或 axes[i,j] 索引(matplotlib 子图)。
  4. 中文乱码 → font.sans-serif + axes.unicode_minus 两行。
  5. ** fill_between → 面积图**;看见 stackplot + baseline='wiggle' → 答主题河流图
  6. 解释:“该参数用于设置 XXX,作用是 XXX,若不设置会导致 XXX。”

分享到社交平台

将本文分享给你的朋友们

2026-06-14-数据可视化 Vol.3 可视化库
https://zhongye1.github.io/posts/数据可视化/2026-06-15-数据可视化-可视化库/
作者
Zhongye
发布于
2026-06-15
版权声明
CC BY-NC-SA 4.0

评论

Profile Image of the Author
Zhongye
南漂中
公告
新的博客站!旧站点传送门 👇
音乐
专辑封面

音乐

暂无播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章数
136
分类数
13
标签数
182
总字数
390,358
运行天数
0
最后更新
0 天前
总访问量
42296
访客数
29212

目录