杰瑞科技汇

Python数据可视化怎么学?

Python 数据可视化终极指南

数据可视化是数据分析中至关重要的一步,它能将枯燥的数字转化为直观、易于理解的图表,帮助我们洞察数据规律、发现异常、并有效地向他人传达发现。

Python数据可视化怎么学?-图1
(图片来源网络,侵删)

Python 拥有强大的可视化生态系统,其中最核心、最常用的库是 MatplotlibSeaborn,本教程将以这两个库为重点,并介绍其他一些现代工具。


第一部分:核心基础 - Matplotlib

Matplotlib 是 Python 最基础、最底层的绘图库,几乎所有其他高级绘图库(包括 Seaborn)都是基于它构建的,理解 Matplotlib 的工作原理,能让你对图表的每一个细节都有完全的控制。

1 Matplotlib 的基本结构

一个 Matplotlib 图表通常包含三个层级:

  1. pyplot 接口 (最常用)

    Python数据可视化怎么学?-图2
    (图片来源网络,侵删)
    • 这是一个简单的、类似 MATLAB 的接口,非常适合快速绘图,你只需要调用 plt.plot(), plt.title() 等函数,Matplotlib 会自动帮你创建和管理图表和坐标轴。
  2. 面向对象接口 (更灵活)

    • 这是 Matplotlib 的核心,当你需要在一个图中创建多个子图,或者对图表进行精细控制时,必须使用这个接口。
    • 关键概念:
      • Figure: 整个图表窗口,可以理解为画布。
      • Axes: 一个坐标系,是图表的核心部分,包含了数据、坐标轴、标题等,一个 Figure 可以包含多个 Axes
  3. Artist 接口 (最底层)

    • 几乎图表中的所有元素(如线条、文本、图例等)都是 Artist 对象,这个层级非常强大,但也很复杂,通常只在需要高度定制化时使用。

我们主要学习层级一和层级二。

2 Matplotlib 入门:绘制你的第一张图

安装 Matplotlib

pip install matplotlib

基本绘图流程 (使用 pyplot 接口)

import matplotlib.pyplot as plt
import numpy as np
# 1. 准备数据
x = np.linspace(0, 10, 100) # 生成0到10之间100个点
y = np.sin(x)
# 2. 创建图表并绘图
plt.plot(x, y, label='sin(x)', color='blue', linestyle='--')
# 3. 添加图表元素"Sine Wave")      # 标题
plt.xlabel("X-axis")        # X轴标签
plt.ylabel("Y-axis")        # Y轴标签
plt.legend()                # 显示图例
plt.grid(True)              # 显示网格
# 4. 显示或保存图表
plt.show()                  # 在屏幕上显示
# plt.savefig("sine_wave.png") # 保存为图片文件

代码解析:

  • plt.plot(): 核心绘图函数,用于绘制折线图(或散点图等)。
  • label, color, linestyle: 用于自定义线条的样式。
  • plt.title(), plt.xlabel(), plt.ylabel(): 分别设置标题、X轴和Y轴的标签。
  • plt.legend(): 自动根据 label 显示图例。
  • plt.grid(): 添加背景网格。
  • plt.show(): 将所有设置应用到图表并弹出窗口显示。

面向对象接口 (推荐用于复杂图表)

import matplotlib.pyplot as plt
import numpy as np
# 1. 准备数据
x = np.linspace(0, 10, 100)
y_sin = np.sin(x)
y_cos = np.cos(x)
# 2. 创建画布和坐标轴对象
fig, ax = plt.subplots()
# 3. 在坐标轴对象上绘图
ax.plot(x, y_sin, label='sin(x)', color='blue')
ax.plot(x, y_cos, label='cos(x)', color='red')
# 4. 在坐标轴对象上添加元素
ax.set_title("Sine and Cosine Waves")
ax.set_xlabel("X-axis")
ax.set_ylabel("Y-axis")
ax.legend()
ax.grid(True)
# 5. 显示图表
plt.show()

关键区别:

  • fig, ax = plt.subplots(): 创建了一个 Figure (fig) 和一个 Axes (ax)。
  • 后续所有操作(如 plot, set_title)都是通过 ax 对象来完成的,而不是 plt,这使得代码更清晰,尤其是在处理多个子图时。

第二部分:进阶美化 - Seaborn

Seaborn 是一个基于 Matplotlib 的高级库,它提供了更美观的默认样式、更简单的 API 以及专门用于统计可视化的复杂图表。

1 为什么使用 Seaborn?

  • 美观的默认样式:Seaborn 的图表看起来更专业、更现代。
  • 简化复杂图表:只需一行代码即可绘制出复杂的统计图表(如小提琴图、箱线图、热力图等)。
  • 与 Pandas 无缝集成:可以直接从 Pandas DataFrame 中读取数据,非常方便。
  • 内置数据集:Seaborn 自带了一些经典的数据集,方便练习。

2 Seaborn 基础

安装 Seaborn

pip install seaborn

Seaborn 与 Matplotlib 的结合使用

一个常见的模式是:用 Seaborn 设置图表的整体风格,然后用 Matplotlib 进行精细调整。

import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
# 使用 Seaborn 的默认样式
sns.set_theme(style="whitegrid")
# 准备数据
tips = sns.load_dataset("tips") # 加载 Seaborn 内置数据集
# 使用 Matplotlib 的面向对象接口创建图表
fig, ax = plt.subplots(figsize=(8, 6))
# 使用 Seaborn 的函数在 ax 上绘图
sns.scatterplot(data=tips, x="total_bill", y="tip", hue="day", size="size", ax=ax)
# 使用 Matplotlib 进行最终调整
ax.set_title("Total Bill vs. Tip")
plt.show()

代码解析:

  • sns.set_theme(): 设置图表的全局风格,如背景、网格等。
  • sns.load_dataset(): 加载内置数据集。
  • sns.scatterplot(): 绘制散点图。hue 参数可以根据类别给不同组的数据点上色,size 参数可以改变点的大小,非常强大。
  • figsize=(8, 6): 设置图表大小。

3 Seaborn 常用图表类型

Seaborn 的核心是其图形级函数(直接作用于整个 Figure)和轴级函数(在 Axes 上绘图)。

关系型图

用于探索变量之间的关系。

  • relplot(): 图形级,可以创建 scatterplotlineplot 的组合。
  • scatterplot(): 轴级,散点图。
  • lineplot(): 轴级,折线图。
sns.relplot(data=tips, x="total_bill", y="tip", col="time", row="smoker", hue="day")
plt.show()

relplot 默认创建 FacetGrid,可以轻松地按 col (列) 和 row (行) 分面,生成多个子图。

分布型图

用于展示单变量或双变量的分布。

  • displot(): 图形级,可以创建 histplot, kdeplot, ecdfplot 的组合。
  • histplot(): 轴级,直方图。
  • kdeplot(): 轴级,核密度估计图。
  • boxplot(): 轴级,箱线图。
  • violinplot(): 轴级,小提琴图。
# 绘制总账单的分布
sns.displot(data=tips, x="total_bill", kind="kde", fill=True)
plt.show()
# 按性别比较小费分布
sns.violinplot(data=tips, x="day", y="tip", hue="sex")
plt.show()

分类图

用于展示分类数据。

  • catplot(): 图形级,可以创建多种分类图的组合。
  • barplot(): 轴级,条形图(默认显示均值和置信区间)。
  • countplot(): 轴级,计数条形图。
# 查看每天进餐人数
sns.countplot(data=tips, x="day")
plt.show()
# 比较不同性别和吸烟者的总账单均值
sns.barplot(data=tips, x="sex", y="total_bill", hue="smoker")
plt.show()

矩阵图

用于展示成对变量之间的关系。

  • heatmap(): 热力图,非常适合展示相关矩阵。
  • clustermap(): 聚类热力图。
# 计算数据集的相关性矩阵
correlation_matrix = tips.corr(numeric_only=True)
# 绘制热力图
sns.heatmap(correlation_matrix, annot=True, cmap="coolwarm")
plt.show()

annot=True 会在格子里显示数值,cmap 设置颜色映射。


第三部分:其他优秀可视化工具

除了 Matplotlib 和 Seaborn,还有一些特定场景下非常出色的库。

1 Plotly (交互式图表)

Plotly 是一个强大的交互式可视化库,可以创建出可缩放、可悬停、可点击的动态图表。

pip install plotly
import plotly.express as px
import pandas as pd
# 使用 Plotly Express,语法和 Seaborn 非常相似
df = pd.DataFrame({
    "Fruit": ["Apples", "Oranges", "Bananas", "Apples", "Oranges", "Bananas"],
    "Amount": [4, 1, 2, 2, 4, 5],
    "City": ["SF", "SF", "SF", "Montreal", "Montreal", "Montreal"]
})
# 一行代码创建交互式条形图
fig = px.bar(df, x="Fruit", y="Amount", color="City", barmode="group")
fig.show()

优点:交互性强,适合做仪表盘和 Web 应用。 缺点:对于静态报告,生成的 HTML 文件可能较大。

2 Pandas 内置绘图

Pandas 的 DataFrame 和 Series 对象自带一个 .plot() 方法,它底层调用的是 Matplotlib,可以快速绘制简单的图表。

import pandas as pd
df = pd.DataFrame(np.random.randn(10, 4),
                  index=pd.date_range('1/1/2025', periods=10),
                  columns=list('ABCD'))
# 折线图
df.plot()
# 散点图
df.plot.scatter(x='A', y='B')
# 直方图
df['A'].plot.hist()
plt.show()

优点:非常方便,无需额外导入 matplotlib.pyplot缺点:定制化能力有限,不适合复杂的图表。


第四部分:学习路径与最佳实践

1 推荐学习路径

  1. 从 Matplotlib 开始:理解 pyplot 和面向对象接口的基本用法,能熟练绘制折线图、散点图、柱状图,并会添加标题、标签、图例等。
  2. 掌握 Seaborn:学习使用 Seaborn 的各种统计图表(displot, catplot, heatmap),并理解如何与 Matplotlib 结合进行高级定制。
  3. 探索 Plotly:当你需要制作交互式图表或仪表盘时,学习 Plotly Express,它非常易用。
  4. 进阶:如果需要更底层的控制,可以深入学习 Matplotlib 的 Artist 层级。

2 最佳实践

  1. 明确你的目标:你想展示什么?趋势?分布?比较?关系?目标决定了你选择的图表类型。
  2. 保持简洁:避免图表“信息过载”,只突出最重要的信息,删除不必要的装饰。
  3. 合理使用颜色
    • 使用颜色来区分数据类别,而不是为了好看。
    • 考虑色盲友好型配色方案(如 Seaborn 的 colorblind 调色板)。
    • 对于黑白打印,确保颜色在灰度下也能区分。
  4. 标注清晰、坐标轴标签、图例、数据标签等必须清晰明了,让读者无需猜测就能理解图表内容。
  5. 先出图,再优化:先用简单代码把图画出来,然后再逐步添加样式和细节,不要试图一次性写出完美的代码。

特点 适用场景
Matplotlib 底层、灵活、控制力强 所有类型的图表,尤其是需要高度定制化的静态图表,是其他库的基础。
Seaborn 高层、美观、统计图表丰富 快速绘制专业的统计图表,与 Pandas 数据结合紧密。
Plotly 交互式、动态、Web 友好 交互式仪表盘、数据分析报告、Web 应用。
Pandas Plot 极其方便、快速 数据探索阶段,绘制简单的、快速的图表。

没有“最好”的库,只有“最合适”的工具。 熟练掌握 Matplotlib 和 Seaborn,你就能应对绝大多数数据可视化任务,祝你学习愉快!

分享:
扫描分享到社交APP
上一篇
下一篇