跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

Python 数据分析常用图表绘制指南

Python 数据分析中常用的图表类型,包括折线图、直方图、条形图、饼图、箱线图、热力图、散点图、雷达图、二元变量分布、面积图和六边形图。通过对比 Matplotlib 和 Seaborn 两种库的用法,提供了详细的代码示例与适用场景分析,帮助读者根据数据特征选择合适的可视化方案,并涵盖了从基础绘图到高级分析的完整流程。

www发布于 2025/2/7更新于 2026/9/1069 浏览
Python 数据分析常用图表绘制指南

Python 数据分析常用图表绘制指南

在数据分析与可视化领域,选择合适的图表能够直观地展示数据特征、趋势及分布。本文详细介绍了 Python 中常用的 12 种图表类型,对比了 Matplotlib 和 Seaborn 两种主流库的用法,并提供完整的代码示例与适用场景分析。

环境准备

默认所有操作均基于以下库:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# 设置绘图风格
plt.style.use('seaborn-v0_8')
sns.set_theme(style="whitegrid")

1. 折线图 (Line Plot)

折线图主要用于展示数据随时间变化的趋势,适合连续型数据的序列分析。

代码示例

x = [2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019]
y = [5, 3, 6, 20, 17, 16, 19, 30, 32, 35]

# Matplotlib
plt.figure(figsize=(10, 6))
plt.plot(x, y, marker='o', linestyle='-', color='b')
plt.title('Yearly Trend')
plt.xlabel('Year')
plt.ylabel('Value')
plt.grid(True)
plt.show()

# Seaborn
df = pd.DataFrame({'x': x, 'y': y})
plt.figure(figsize=(10, 6))
sns.lineplot(data=df, x='x', y='y', marker='o')
plt.title('Seaborn Line Plot')
plt.show()

注意事项

  • 适用于时间序列或有序分类数据。
  • 可通过 linestyle 调整线条样式,marker 添加数据点标记。

折线图示例

2. 直方图 (Histogram)

直方图用于展示连续变量的频率分布,将横坐标划分为若干区间,用矩形条表示各区间内的数值频数。

代码示例

a = np.random.randn(1000)
s = pd.Series(a)

# Matplotlib
plt.hist(s, bins=30, edgecolor='black', alpha=0.7)
plt.title('Distribution Histogram')
plt.show()

# Seaborn
plt.figure(figsize=(10, 6))
sns.histplot(s, kde=False, bins=30, color='skyblue')
plt.title('Seaborn Histogram')
plt.show()

# 带核密度估计
sns.histplot(s, kde=True, bins=30, color='salmon')
plt.show()

注意事项

  • bins 参数控制分组数量,影响分布细节。
  • 结合 KDE(核密度估计)可观察平滑的概率密度曲线。

直方图示例

3. 垂直条形图 (Bar Chart)

条形图用于比较不同类别的数据大小,长条长度代表频数或数值,宽度代表类别。

代码示例

x = ['Cat1', 'Cat2', 'Cat3', 'Cat4', 'Cat5']
y = [5, 4, 8, 12, 7]

# Matplotlib
plt.bar(x, y, color='steelblue')
plt.title('Vertical Bar Chart')
plt.ylabel('Frequency')
plt.show()

# Seaborn
df_bar = pd.DataFrame({'Category': x, 'Value': y})
plt.figure(figsize=(10, 6))
sns.barplot(data=df_bar, x='Category', y='Value', palette='viridis')
plt.title('Seaborn Bar Chart')
plt.show()

注意事项

  • 适用于离散分类数据。
  • Seaborn 支持自动置信区间显示(通过 ci 参数)。

垂直条形图示例

4. 水平条形图 (Horizontal Bar Chart)

当类别名称较长时,水平条形图能提供更好的可读性。

代码示例

plt.barh(x, y, color='coral')
plt.title('Horizontal Bar Chart')
plt.xlabel('Frequency')
plt.show()

注意事项

  • 使用 barh 函数实现。
  • 适合类别标签较长的情况。

水平条形图示例

5. 饼图 (Pie Chart)

饼图展示部分占整体的比例关系,但仅适用于类别较少且差异明显的场景。

代码示例

nums = [25, 37, 33, 37, 6]
labels = ['High-school','Bachelor','Master','Ph.d', 'Others']

plt.figure(figsize=(8, 8))
plt.pie(nums, labels=labels, autopct='%1.1f%%', startangle=90)
plt.title('Education Level Distribution')
plt.axis('equal')
plt.show()

注意事项

  • 避免类别过多导致难以辨认。
  • 建议配合图例使用。

饼图示例

6. 箱线图 (Box Plot)

箱线图展示数据的五数概括(最小值、下四分位数、中位数、上四分位数、最大值),用于分析数据的离散程度和异常值。

代码示例

# 生成随机数据
data = np.random.normal(size=(10, 4))
lables = ['A', 'B', 'C', 'D']

# Matplotlib
plt.figure(figsize=(10, 6))
plt.boxplot(data, labels=lables, patch_artist=True)
plt.title('Matplotlib Boxplot')
plt.show()

# Seaborn
df_box = pd.DataFrame(data, columns=lables)
plt.figure(figsize=(10, 6))
sns.boxplot(data=df_box)
plt.title('Seaborn Boxplot')
plt.show()

注意事项

  • 箱体范围覆盖中间 50% 数据。
  • 须点通常表示异常值。

箱线图示例

7. 热力图 (Heatmap)

热力图通过颜色深浅表示矩阵元素的大小,适合展示相关性矩阵或二维数据分布。

代码示例

# 简单矩阵
data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
ax = sns.heatmap(data, annot=True, cmap='YlGnBu')
plt.title('Simple Heatmap')
plt.show()

# 真实数据集
flights = sns.load_dataset("flights")
data_flights = flights.pivot('year', 'month', 'passengers')
plt.figure(figsize=(12, 8))
sns.heatmap(data_flights, annot=False, cmap='coolwarm')
plt.title('Passenger Volume Heatmap')
plt.show()

注意事项

  • 颜色映射 (cmap) 影响视觉效果。
  • annot=True 可在单元格显示数值。

热力图示例

8. 散点图 (Scatter Plot)

散点图展示两个变量之间的关系,是探索相关性最常用的工具。

代码示例

N = 1000
x = np.random.randn(N)
y = np.random.randn(N)

# Matplotlib
plt.scatter(x, y, marker='x', alpha=0.5)
plt.title('Scatter Plot')
plt.show()

# Seaborn
df_scatter = pd.DataFrame({'x': x, 'y': y})
plt.figure(figsize=(10, 6))
sns.jointplot(x='x', y='y', data=df_scatter, kind='scatter')
plt.show()

注意事项

  • 点密度反映数据集中区域。
  • 可结合回归线分析线性关系。

散点图示例

9. 雷达图 (Radar Chart)

雷达图用于显示多变量数据,适合评估对象在多个维度上的表现。

代码示例

labels = np.array(["推进", "KDA", "生存", "团战", "发育", "输出"])
stats = [83, 61, 95, 67, 76, 88]
angles = np.linspace(0, 2 * np.pi, len(labels), endpoint=False)
stats = np.concatenate((stats, [stats[0]]))
angles = np.concatenate((angles, [angles[0]]))

fig = plt.figure(figsize=(8, 8))
ax = fig.add_subplot(111, polar=True)
ax.plot(angles, stats, 'o-', linewidth=2)
ax.fill(angles, stats, alpha=0.25)
ax.set_thetagrids(angles * 180 / np.pi, labels, fontproperties="SimHei")
plt.title('Performance Radar Chart')
plt.show()

注意事项

  • 需处理中文字体显示问题。
  • 闭合路径需重复第一个点。

雷达图示例

10. 二元变量分布 (Joint Plot)

联合分布图同时展示两个变量的散点分布及其边缘分布。

代码示例

tips = sns.load_dataset("tips")

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

# 核密度
sns.jointplot(x="total_bill", y="tip", data=tips, kind='kde')
plt.show()

# Hexbin
sns.jointplot(x="total_bill", y="tip", data=tips, kind='hex')
plt.show()

注意事项

  • kind 参数决定子图类型。
  • 适合分析变量间的相关性与分布形态。

二元变量分布示例

11. 面积图 (Area Chart)

面积图强调数量随时间的变化程度,堆积面积图可显示部分与整体的关系。

代码示例

df_area = pd.DataFrame(
    np.random.rand(10, 4), 
    columns=['a', 'b', 'c', 'd'])

# 堆叠面积图
df_area.plot.area(figsize=(10, 6))
plt.title('Stacked Area Chart')
plt.show()

# 非堆叠面积图
df_area.plot.area(stacked=False, figsize=(10, 6))
plt.title('Non-stacked Area Chart')
plt.show()

注意事项

  • 堆积图需注意总量是否恒定。
  • 适合展示趋势和构成变化。

面积图示例

12. 六边形图 (Hexbin Plot)

六边形图将空间中的点聚合成六边形,根据内部点数上色,适合大数据量散点图的降维展示。

代码示例

df_hex = pd.DataFrame(
    np.random.randn(1000, 2), 
    columns=['a', 'b'])
df_hex['b'] = df_hex['b'] + np.arange(1000)

plt.figure(figsize=(8, 8))
df_hex.plot.hexbin(x='a', y='b', gridsize=25, cmap='Blues')
plt.title('Hexbin Plot')
plt.colorbar(label='Count')
plt.show()

注意事项

  • gridsize 控制六边形数量。
  • 比散点图更适合百万级数据。

六边形图示例

总结与选型建议

选择合适的图表是数据分析的关键步骤。以下是常见场景的选型参考:

数据类型推荐图表
时间序列趋势折线图、面积图
类别比较条形图、柱状图
占比关系饼图、环形图
分布形态直方图、箱线图、KDE
变量关系散点图、气泡图、热力图
多维数据雷达图、平行坐标图

掌握这些基础图表的绘制方法,能够帮助你更高效地完成数据洞察工作。在实际项目中,建议先明确分析目标,再选择最合适的可视化方案。

目录

  1. Python 数据分析常用图表绘制指南
  2. 环境准备
  3. 设置绘图风格
  4. 1. 折线图 (Line Plot)
  5. 代码示例
  6. Matplotlib
  7. Seaborn
  8. 注意事项
  9. 2. 直方图 (Histogram)
  10. 代码示例
  11. Matplotlib
  12. Seaborn
  13. 带核密度估计
  14. 注意事项
  15. 3. 垂直条形图 (Bar Chart)
  16. 代码示例
  17. Matplotlib
  18. Seaborn
  19. 注意事项
  20. 4. 水平条形图 (Horizontal Bar Chart)
  21. 代码示例
  22. 注意事项
  23. 5. 饼图 (Pie Chart)
  24. 代码示例
  25. 注意事项
  26. 6. 箱线图 (Box Plot)
  27. 代码示例
  28. 生成随机数据
  29. Matplotlib
  30. Seaborn
  31. 注意事项
  32. 7. 热力图 (Heatmap)
  33. 代码示例
  34. 简单矩阵
  35. 真实数据集
  36. 注意事项
  37. 8. 散点图 (Scatter Plot)
  38. 代码示例
  39. Matplotlib
  40. Seaborn
  41. 注意事项
  42. 9. 雷达图 (Radar Chart)
  43. 代码示例
  44. 注意事项
  45. 10. 二元变量分布 (Joint Plot)
  46. 代码示例
  47. 散点
  48. 核密度
  49. Hexbin
  50. 注意事项
  51. 11. 面积图 (Area Chart)
  52. 代码示例
  53. 堆叠面积图
  54. 非堆叠面积图
  55. 注意事项
  56. 12. 六边形图 (Hexbin Plot)
  57. 代码示例
  58. 注意事项
  59. 总结与选型建议

更多推荐文章

查看全部
  • 基于 AI 快速生成 SEEDVR2 虚拟现实项目框架
  • Claude Code 结合 Figma 的 AI 原型设计工作流实践
  • 自然语言处理在金融领域的应用与实战
  • Spec-Kit 结合 Copilot 实现 AI 规格驱动开发
  • C/C++ 算法入门:多状态动态规划与打家劫舍股票问题
  • GitHub 多人协作开发教程
  • PCTF2025 Web 赛题实战复盘:整数溢出、JWT 伪造与 SSTI
  • STL 转 STEP 转换指南:从 3D 打印到工程设计
  • 2026-ai图像生成模型真实感对比-皮肤纹理-光影谁最强
  • DeerFlow 2.0 开源:字节跳动超级智能体架构详解
  • 腾讯混元大模型开源:3890 亿参数与 MoE 架构解析
  • Python 数据可视化秘籍(一)
  • 使用 NVIDIA Isaac 构建医疗机器人:从仿真到部署
  • 基于 Java 和 PostGIS 的 AOI 面数据球面面积计算实践
  • MacOS 安装 OpenClaw 并接入飞书机器人
  • OpenClaw 国内模型调用策略与配置方案
  • 二分查找实战:山峰数组的峰顶索引与寻找峰值
  • 基于 Coze 平台打造国风图片智能体实战
  • Python 数据可视化实战:环境搭建与数据读取入门
  • 大模型如何重塑快递行业?快递 100 应用案例

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online