杰瑞科技汇

Python Notebook绘图如何快速上手?

准备工作:安装和导入库

在开始之前,请确保你已经安装了必要的库。MatplotlibSeaborn 会和 NumPyPandas 一起安装。

Python Notebook绘图如何快速上手?-图1
(图片来源网络,侵删)
pip install matplotlib seaborn numpy pandas

在 Notebook 的代码单元格中,首先需要导入这些库,为了方便,我们通常会给它们设置简短的别名。

# 导入核心库
import numpy as np
import pandas as pd
# 导入绘图库
import matplotlib.pyplot as plt
import seaborn as sns
# 设置一个让图表在 Notebook 中直接显示的“魔法命令”
# 这是 Jupyter Notebook 和 Google Colab 的标准做法
%matplotlib inline

Matplotlib:基础绘图

Matplotlib 是 Python 最基础、最灵活的绘图库,是许多其他高级绘图库(如 Seaborn)的基础。

1 图表的基本结构

一个 Matplotlib 图表通常包含以下几个部分:

  • Figure (画布): 整个图表的窗口或页面。
  • Axes (坐标系): Figure 中的一个子图,包含坐标轴、刻度、标签等。
  • Axis (坐标轴): X轴和Y轴。
  • Title (标题): 图表的标题。
  • Label (标签): X轴和Y轴的名称。
  • Tick (刻度): 坐标轴上的刻度值。
  • Legend (图例): 解释图表中不同线条或元素的含义。

2 创建第一个图表:折线图

让我们从最简单的折线图开始。

Python Notebook绘图如何快速上手?-图2
(图片来源网络,侵删)
# 1. 准备数据
x = np.linspace(0, 10, 100) # 0到10之间生成100个点
y = np.sin(x)
# 2. 创建画布和坐标系
# plt.figure() 可以创建一个画布,这里我们先不使用,直接使用 plt.plot()
# plt.plot() 会自动创建一个坐标系
# 3. 绘制折线
plt.plot(x, y, label='sin(x)', color='blue', linestyle='--')
# 4. 添加图表元素"正弦函数曲线")      # 标题
plt.xlabel("X 轴")            # X轴标签
plt.ylabel("Y 轴")            # Y轴标签
plt.grid(True)                # 显示网格
plt.legend()                  # 显示图例
# 5. 显示图表
# 在 %matplotlib inline 模式下,plt.show() 不是必须的,但加上是良好习惯
plt.show()

代码解释:

  • np.linspace(0, 10, 100): 创建一个从0到10的等差数列,共100个点。
  • plt.plot(x, y, ...): 核心绘图函数。
    • x, y: 数据。
    • label='sin(x)': 为这条线设置一个标签,用于图例。
    • color='blue': 设置线条颜色。
    • linestyle='--': 设置线条样式(虚线)。
  • plt.title(), plt.xlabel(), plt.ylabel(): 分别设置标题、X轴和Y轴的标签。
  • plt.grid(True): 显示背景网格。
  • plt.legend(): 根据设置的 label 显示图例。

3 其他基础图表类型

Matplotlib 支持几乎所有常见的图表类型。

散点图

# 准备数据
x = np.random.rand(50)
y = np.random.rand(50)
colors = np.random.rand(50)
sizes = 1000 * np.random.rand(50) # 点的大小
# 绘制散点图
plt.scatter(x, y, c=colors, s=sizes, alpha=0.5, cmap='viridis')
# 添加颜色条
plt.colorbar(label='颜色映射值')
"随机散点图")
plt.xlabel("X 值")
plt.ylabel("Y 值")
plt.show()

柱状图

Python Notebook绘图如何快速上手?-图3
(图片来源网络,侵删)
# 准备数据
categories = ['A', 'B', 'C', 'D']
values = [15, 30, 45, 10]
# 绘制柱状图
plt.bar(categories, values, color=['red', 'blue', 'green', 'orange'])
"类别数据柱状图")
plt.xlabel("类别")
plt.ylabel("数值")
plt.show()

直方图 直方图用于展示数据的分布情况。

# 准备数据
data = np.random.randn(1000) # 生成1000个标准正态分布的随机数
# 绘制直方图
plt.hist(data, bins=30, color='purple', alpha=0.7) # bins 控制柱子的数量
"数据分布直方图")
plt.xlabel("数值")
plt.ylabel="频数"
plt.show()

Seaborn:高级统计绘图

Seaborn 基于 Matplotlib,提供了更高级的接口和更美观的默认样式,它特别适合用于绘制统计图表,并且能很好地与 Pandas DataFrame 结合。

1 Seaborn 的优势

  • 美观的默认样式: 无需过多配置就能生成漂亮的图表。
  • 内置数据集: 提供了许多经典的数据集供练习。
  • 与 Pandas 无缝集成: 可以直接使用 DataFrame 的列名作为数据源。
  • 专注于统计关系: 专门用于可视化数据之间的关系和分布。

2 使用 Seaborn 绘图

加载示例数据 Seaborn 自带了一些非常有名的数据集,tips(小费数据)和 iris(鸢尾花数据)。

# 加载 tips 数据集
tips = sns.load_dataset("tips")
# 查看数据前5行
tips.head()

输出:

   total_bill   tip     sex    smoker  day    time  size
0       16.99  1.01  Female     No  Sun  Dinner     2
1       10.34  1.66    Male     No  Sun  Dinner     3
2       21.01  3.50    Male     No  Sun  Dinner     3
3       23.68  3.31    Male     No  Sun  Dinner     2
4       24.59  3.61  Female     No  Sun  Dinner     4

关系图 - relplot relplot 是一个高度灵活的函数,用于绘制关系图,默认是散点图,可以通过 kind 参数改为折线图。

# 绘制总账单和小费的关系,并用性别来着色
sns.relplot(data=tips, x="total_bill", y="tip", hue="sex", style="smoker")
"总账单与小费的关系")
plt.show()
  • hue="sex": 用 sex 列的数据为不同的点设置颜色。
  • style="smoker": 用 smoker 列的数据为不同的点设置标记样式。

分布图 - displot displot 用于可视化数据的分布,可以绘制直方图、核密度图等。

# 绘制总账单的分布直方图
sns.displot(data=tips, x="total_bill", bins=20, kde=True)
# kde=True 会同时显示核密度估计曲线"总账单的分布")
plt.show()

分类图 - catplot catplot 用于可视化分类变量和数值变量之间的关系。

  • stripplot / swarmplot (抖动图/蜂群图)
    # 查看不同性别的小费分布
    sns.catplot(data=tips, x="day", y="tip", hue="sex", kind="swarm")
    plt.title("按星期和性别的小费分布")
    plt.show()
  • boxplot (箱线图)
    # 查看不同星期总账单的分布
    sns.boxplot(data=tips, x="day", y="total_bill")
    plt.title("按星期总账单的箱线图")
    plt.show()
  • violinplot (小提琴图) 箱线图和核密度图的结合。
    # 查看不同星期总账单的分布
    sns.violinplot(data=tips, x="day", y="total_bill")
    plt.title("按星期总账单的小提琴图")
    plt.show()

回归图 - regplot / lmplot 用于可视化两个变量之间的线性关系。

# 绘制总账单和小费的回归关系图
sns.regplot(data=tips, x="total_bill", y="tip", scatter_kws={'alpha':0.3})
"总账单与小费的回归关系")
plt.show()

高级技巧与最佳实践

1 图表样式和主题

Seaborn 提供了多种内置主题,可以快速改变图表的整体风格。

# 设置主题为 "whitegrid"
sns.set_theme(style="whitegrid")
# 重新绘制一个图,看看效果
sns.boxplot(data=tips, x="day", y="total_bill")"使用 whitegrid 主题的箱线图")
plt.show()

2 多子图

有时我们需要将多个图组合在一起,Matplotlib 提供了 plt.subplots() 来实现。

# 创建一个 2x2 的图表网格
fig, axes = plt.subplots(2, 2, figsize=(12, 10)) # figsize 设置整个画布大小
# 第一个子图:左上角 (0,0)
axes[0, 0].plot(x, y)
axes[0, 0].set_title("折线图")
# 第二个子图:右上角 (0,1)
axes[0, 1].scatter(tips['total_bill'], tips['tip'])
axes[0, 1].set_title("散点图")
# 第三个子图:左下角 (1,0)
axes[1, 0].hist(tips['total_bill'])
axes[1, 0].set_title("直方图")
# 第四个子图:右下角 (1,1)
axes[1, 1].bar(categories, values)
axes[1, 1].set_title("柱状图")
# 调整子图之间的间距,防止重叠
plt.tight_layout()
plt.show()

3 保存图表

使用 plt.savefig() 可以将图表保存为图片文件。

# 在绘制图表后调用
plt.figure(figsize=(8, 6))
sns.regplot(data=tips, x="total_bill", y="tip")"总账单与小费的回归关系")
# 保存为 PNG 文件,dpi 是分辨率
plt.savefig("my_plot.png", dpi=300)
# 保存为 PDF 文件(矢量图,适合打印)
# plt.savefig("my_plot.pdf")
plt.show()

总结与建议

优点 缺点 适用场景
Matplotlib - 基础、灵活,是所有库的基石
- 可定制性极强,能画出任何你想要的图表
- 代码相对繁琐
- 默认样式不够美观
- 需要高度自定义的图表
- 创建简单的、标准化的图表
Seaborn - 语法简洁,代码量少
- 默认美观,主题丰富
- 与 Pandas 深度集成,专为统计图表设计
- 定制性不如 Matplotlib 灵活
- 依赖 Matplotlib 作为底层引擎
- 快速探索数据之间的关系和分布
- 绘制各类统计图表(箱线图、小提琴图、热力图等)

给初学者的建议

  1. 从 Seaborn 开始: 对于大多数数据分析任务,Seaborn 是更好的起点,它能让你用更少的代码实现更专业的可视化效果。
  2. 遇到瓶颈时求助于 Matplotlib: 当你需要对图表进行非常精细的控制,而 Seaborn 无法满足时,再回到 Matplotlib,你需要理解 Seaborn 的图其实是构建在 Matplotlib 的 FigureAxes 之上的,所以两者可以混合使用。
  3. 勤加练习: 尝试用不同的图表类型去可视化你的数据,并思考哪种图表最能表达你想传达的信息,数据可视化是一门艺术,也是一门科学。

希望这份详细的指南能帮助你在 Python Notebook 中自由地绘制出精美的图表!

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