Matplotlib子图与布局练习

数据可视化系列练习 - 探索Matplotlib的各种布局和子图功能

练习1: plt.subplot() 基础

练习1: plt.subplot() 基础

知识点:plt.subplot()

使用plt.subplot()在一个2x1的布局中,分别绘制条形图和折线图。

数据:

  • 两种电子产品季度销量数据
  • 智能手表销量:[120, 150, 130, 180]
  • 蓝牙耳机销量:[200, 180, 220, 250]

实现内容:

  • 创建一个图表 (plt.figure())
  • 使用plt.subplot(211)创建上方子图,绘制智能手表销量的垂直条形图
  • 使用plt.subplot(212)创建下方子图,绘制蓝牙耳机销量的折线图
  • 添加标题和坐标轴标签

练习2: plt.subplots() 与坐标轴共享

练习2: plt.subplots() 与坐标轴共享

知识点:plt.subplots() 和 sharey=True

使用plt.subplots()创建一个1x2的布局,并让两个子图共享Y轴。

数据:

  • 不同社交平台用户性别比例
  • 平台:['微博', 'B站', '抖音', '小红书', '知乎']
  • 男性用户:[55, 45, 50, 30, 60]
  • 女性用户:[45, 55, 50, 70, 40]

实现内容:

  • 使用plt.subplots(1, 2, sharey=True)创建共享Y轴的子图
  • 左侧子图:绘制男性用户的水平条形图
  • 右侧子图:绘制女性用户的水平条形图
  • 设置相同的X轴范围以便比较

练习3: plt.subplot2grid() 非对称布局

练习3: plt.subplot2grid() 非对称布局

知识点:plt.subplot2grid(),使用rowspan和colspan

使用plt.subplot2grid()创建一个2x2的非对称网格布局。

数据:

  • 网站流量分析数据
  • 月份:['一月', '二月', '三月', '四月', '五月', '六月']
  • 访问量:[1.5, 1.8, 2.2, 2.0, 2.5, 2.8](单位:百万)
  • 流量来源数据(2023年和2024年)

实现内容:

  • 左上角子图:2023年流量来源的饼图
  • 左下角子图:2024年流量来源的饼图
  • 右侧子图:跨两行的月度访问量条形图

练习4: ax.twiny() 双坐标轴

练习4: ax.twiny() 双坐标轴

知识点:ax.twiny()

在同一个图表中使用两个Y轴(左侧和右侧)来展示不同尺度的数据。

数据:

  • 某股票月度价格与成交量数据
  • 月份:['一月', '二月', '三月', '四月', '五月', '六月']
  • 股价:[100, 105, 115, 110, 120, 135]
  • 成交量:[1.2, 1.5, 2.0, 1.8, 2.5, 3.0](单位:百万股)

实现内容:

  • 使用plt.subplots()创建一个图表和子图
  • 在左侧Y轴上绘制成交量的垂直条形图
  • 使用ax.twiny()创建第二个共享X轴的子图
  • 在右侧Y轴上绘制股价的折线图

练习5: GridSpec 自定义布局

练习5: GridSpec 自定义布局

知识点:matplotlib.gridspec.GridSpec 和 constrained_layout=True

使用GridSpec(网格规范)来创建灵活的2x2布局。

数据:

  • 大学年度招生情况数据
  • 年份:['2021年', '2022年', '2023年', '2024年']
  • 总招生人数:[12000, 21500, 23000, 24000]
  • 各学院招生人数:[18000, 5000, 6000, 4000]

实现内容:

  • 创建一个图表,并设置constrained_layout=True
  • 创建一个2x2的GridSpec对象
  • 上方子图:绘制总招生人数的折线图(跨两列)
  • 左下方子图:绘制各学院招生人数的饼图
  • 右下方子图:绘制各学院招生人数的垂直条形图