查看全课大纲(第 82 / 101 节)
  1. 1.数据分析基本概念
  2. 2.学习数据分析的一般路线
  3. 3.数据分析的流程
  4. 4.数据类型
  5. 5.环境部署(1)
  6. 6.环境部署(2)
  7. 7.课程介绍
  8. 8.TXT文件操作
  9. 9.JSON文件操作
  10. 10.CSV文件操作
  11. 11.Excel文件操作
  12. 12.数据库及SQL常用语法
  13. 13.数据库基本操作
  14. 14.数据库多表连接
  15. 15.实战:欧洲职业足球数据库分析
  16. 16.爬虫简介
  17. 17.URL管理模块
  18. 18.网页下载模块
  19. 19.网页解析模块(1)
  20. 20.网页解析模块(2)
  21. 21.Scrapy简介
  22. 22.Scrapy使用步骤(1)
  23. 23.Scrapy使用步骤(2)
  24. 24.Scrapy使用步骤(3)
  25. 25.Scrapy使用步骤(4)
  26. 26.实战:获取国内城市空气质量指数数据
  27. 27.NumPy和SciPy介绍
  28. 28.多维数组
  29. 29.多维数组操作
  30. 30.NumPy的常用方法
  31. 31.向量化介绍
  32. 32.向量化及通用函数
  33. 33.实战:2016美国大选分析
  34. 34.数据结构-Series
  35. 35.数据结构-DataFrame
  36. 36.数据结构-Index
  37. 37.Series的索引操作
  38. 38.DataFrame的索引操作
  39. 39.索引操作总结
  40. 40.运算与对齐
  41. 41.函数应用操作(1) -- map
  42. 42.函数应用操作 (2) -- apply applymap
  43. 43.文件读写操作
  44. 44.排序操作
  45. 45.数据清洗--处理缺失数据
  46. 46.数据清洗--处理重复数据
  47. 47.数据清洗--替换数据
  48. 48.常用统计方法(1) -- describe quantile
  49. 49.常用统计方法(2) -- sum mean median count
  50. 50.常用统计方法(3) -- max min idxmax idxmin
  51. 51.常用统计方法(4) -- mad var std cumsum
  52. 52.实战:全球食品数据分析
  53. 53.层级索引
  54. 54.分组与聚合介绍
  55. 55.分组操作(1) -- GroupBy对象及常用聚合操作
  56. 56.分组操作(2) -- 自定义分组及聚合操作
  57. 57.透视表介绍
  58. 58.透视表操作
  59. 59.数据规整(1) -- 数据合并concat
  60. 60.数据规整(2) -- 数据连接merge
  61. 61.数据重构(3) -- 数据重构stack unstack
  62. 62.实战:互联网电影资料库分析
  63. 63.探索性数据分析EDA介绍
  64. 64.EDA的目的
  65. 65.EDA常用工具
  66. 66.Matplotlib绘图基本介绍
  67. 67.Matplotlib画布
  68. 68.散点图和柱状图的绘制
  69. 69.直方图的绘制
  70. 70.矩阵绘图
  71. 71.子图的使用
  72. 72.Matplotlib颜色、标记、线型
  73. 73.Matplotlib坐标刻度、标签、图例、标题
  74. 74.Seaborn介绍
  75. 75.数据集分布可视化(1) -- 单变量分布、双变量分布
  76. 76.数据集分布可视化(2) -- 变量关系可视化
  77. 77.类别数据可视化 -- 类别散布图、类别内数据分布、类别内统计图
  78. 78.交互式数据可视化工具Bokeh介绍
  79. 79.Bokeh绘制散点图、柱状图、盒子图、弦图
  80. 80.Bokeh绘制常用图形元素
  81. 81.3D绘图 -- mplot3d
  82. 82.3D曲线可视化
  83. 83.3D散点图可视化
  84. 84.3D柱状图可视化
  85. 85.Pandas绘图
  86. 86.实战:Lending Club借贷数据探索性分析及可视化
  87. 87.机器学习介绍及应用场景
  88. 88.机器学习建模介绍 (1) -- 分类
  89. 89.机器学习建模介绍 (2) -- 回归
  90. 90.机器学习建模介绍 (3) -- 聚类
  91. 91.机器学习分类
  92. 92.机器学习工具scikit-learn
  93. 93.使用scikit-learn的流程
  94. 94.数据集准备及划分
  95. 95.模型选择
  96. 96.数据预处理及特征工程
  97. 97.过拟合与欠拟合
  98. 98.模型调参介绍
  99. 99.模型调参方法
  100. 100.模型测试及评价
  101. 101.实战:通过移动设备行为数据预测性别和年龄

3D曲线可视化

约 3 分钟

📺 正在播放小象学院官方高清录播(支持倍速与清晰度调节)

小象实战讲义 · Python数据分析实战

在上一节中,我们学习了如何使用 Matplotlib 的 Axes3D 模块来创建三维坐标轴。本节我们将聚焦于如何在三维空间中绘制曲线。三维曲线能够直观地展示三个变量之间的关系,是数据探索和科学计算中常用的可视化手段。学完本节,你将掌握使用 Axes3D.plot 方法绘制三维曲线,并理解如何调整坐标轴的朝向。

💡 核心导读

  • 核心方法:使用 Axes3D.plot(xs, ys, zs, zdir) 绘制三维曲线。
  • 参数解析:xs, ys, zs 分别代表数据点在三个坐标轴上的位置;zdir 参数指定把”第三维数据”绘制到哪个坐标轴。
  • 数据准备:绘制三维曲线的关键在于准备好三个一维数组,分别代表X、Y、Z坐标。
  • 视图控制:真正的三维视角(相机角度)由 ax.view_init(elev, azim) 控制;zdir 改变的是数据到坐标轴的映射。

绘制三维曲线的基本方法

在 Matplotlib 的三维绘图模块中,绘制曲线与二维绘图思路一致,核心是调用 plot 方法。不过,我们需要在三维坐标系 (Axes3D 对象) 上调用它。

Axes3D.plot 方法的核心参数如下:

  • xs, ys, zs: 这三个参数是长度相同的一维数组(或列表),分别定义了曲线上每个点在 X 轴、Y 轴和 Z 轴上的坐标。
  • zdir: 指定把第三维数据(zs)绘制到哪个坐标轴,默认 'z'(绘制到 Z 轴)。设为 'x' 或 'y' 时,这组数据会被重新映射绘制到 X 轴或 Y 轴上——改变的是数据与坐标轴的对应关系,而不是相机视角(调整观察角度请用 ax.view_init(elev, azim))。

简单来说,准备好你的三维坐标点,然后调用 ax.plot(xs, ys, zs),就能得到一条连接这些点的三维曲线。

实战:绘制一条三维螺旋线

让我们通过一个经典的例子——三维螺旋线,来实践上述方法。我们将生成一条在 Z 轴方向延伸,同时在 X-Y 平面做圆周运动的曲线。

import numpy as np
import matplotlib.pyplot as plt
# 使用非交互式后端,确保在任何环境中都能运行
plt.switch_backend('Agg')
from mpl_toolkits.mplot3d import Axes3D

# 1. 准备数据:生成一条三维螺旋线的坐标
# 在Z轴上生成1000个等间距点,范围从0到15
zline = np.linspace(0, 15, 1000)
# X坐标是Z坐标的正弦值,形成圆周运动的X分量
xline = np.sin(zline)
# Y坐标是Z坐标的余弦值,形成圆周运动的Y分量
yline = np.cos(zline)

# 2. 创建画布和三维坐标轴
fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection='3d') # 创建3D坐标轴

# 3. 绘制三维曲线
ax.plot(xline, yline, zline, label='3D Spiral')

# 4. 添加坐标轴标签和图例
ax.set_xlabel('X Axis')
ax.set_ylabel('Y Axis')
ax.set_zlabel('Z Axis')
ax.legend()

# 5. 显示图形(在脚本中,通常使用plt.show(),这里我们保存以便演示)
# plt.show()
print("三维螺旋线图形已创建(默认 zdir='z':第三维数据绘制到 Z 轴)。")
三维螺旋线图形已创建(默认 zdir='z':第三维数据绘制到 Z 轴)。

运行以上代码,你将看到一个围绕 Z 轴旋转上升的螺旋线图形(默认视角下 Z 轴朝上)。

探索 zdir 参数:改变第三维数据的映射轴

zdir 参数的作用是把第三维数据重新映射到指定的坐标轴上。它不旋转相机、也不改变视角——默认视角始终是 Z 轴朝上;变的是”这组数据画在哪根轴上”。

import numpy as np
import matplotlib.pyplot as plt
plt.switch_backend('Agg')
from mpl_toolkits.mplot3d import Axes3D

# 使用相同的数据
zline = np.linspace(0, 15, 1000)
xline = np.sin(zline)
yline = np.cos(zline)

# 创建画布和子图
fig = plt.figure(figsize=(16, 5))

# 子图1:zdir='x',第三维数据(zline)绘制到 X 轴
ax1 = fig.add_subplot(131, projection='3d')
ax1.plot(xline, yline, zline, zdir='x')
ax1.set_xlabel('X (3rd-dim data)')
ax1.set_ylabel('Y')
ax1.set_zlabel('Z')
ax1.set_title("zdir='x'")

# 子图2:zdir='y',第三维数据(zline)绘制到 Y 轴
ax2 = fig.add_subplot(132, projection='3d')
ax2.plot(xline, yline, zline, zdir='y')
ax2.set_xlabel('X')
ax2.set_ylabel('Y (3rd-dim data)')
ax2.set_zlabel('Z')
ax2.set_title("zdir='y'")

# 子图3:zdir='z' (默认),第三维数据绘制到 Z 轴
ax3 = fig.add_subplot(133, projection='3d')
ax3.plot(xline, yline, zline, zdir='z')
ax3.set_xlabel('X')
ax3.set_ylabel('Y')
ax3.set_zlabel('Z (3rd-dim data)')
ax3.set_title("zdir='z' (Default)")

plt.tight_layout()
# plt.show()
print("已创建对比图,展示了设置不同 `zdir` 参数的效果。")
已创建对比图,展示了设置不同 `zdir` 参数的效果。

通过对比这三个子图,你可以清晰地看到:

  • 当 zdir='x' 时,第三维数据(原 zline)被绘制到了 X 轴上,螺旋沿 X 轴方向延伸。
  • 当 zdir='y' 时,第三维数据被绘制到了 Y 轴上,螺旋沿 Y 轴方向延伸。
  • 当 zdir='z'(默认)时,第三维数据绘制在 Z 轴上,得到我们最熟悉的视图。

三个子图的相机视角是相同的——不同的只是数据被映射到了不同的轴。当你需要把”第三维”的含义对齐到某根特定坐标轴时(例如把高度数据画到 Y 轴),这个参数非常有用;若要改变观察角度,请使用 ax.view_init(elev, azim)。

📝 动手练一练

  1. 概念辨析:Axes3D.plot 方法中的 zdir 参数改变了数据的原始坐标吗?还是仅仅改变了图形的显示方式?
👉 点击查看参考答案

zdir 参数改变的是数据到坐标轴的映射关系:它把第三维数据(zs)重新映射绘制到 zdir 指定的坐标轴('x'/'y'/'z')上。它不改变相机视角——想从不同角度观察三维图形,应使用 ax.view_init(elev, azim) 调整仰角和方位角。

  1. 动手实践:尝试修改第一个实战示例中的 zline 范围,将其从 np.linspace(0, 15, 1000) 改为 np.linspace(0, 30, 500),并重新运行代码。观察螺旋线的圈数和光滑度发生了怎样的变化?这说明了 np.linspace 参数与图形特性的什么关系?
👉 点击查看参考答案

将参数改为 np.linspace(0, 30, 500) 后:

  • 圈数增加:因为 Z 轴范围从 15 扩大到 30,螺旋线在竖直方向上延伸得更长,因此旋转的圈数大约增加了一倍。
  • 光滑度降低:因为总点数从 1000 减少到 500,连接点与点之间的线段变少,曲线看起来会更“棱角分明”,不如之前光滑。 这说明 np.linspace(start, stop, num) 中:
  • stop 控制着参数(这里映射为Z轴)的范围,影响曲线的“长度”或“周期数”。
  • num 控制着采样点的数量,点数越多,绘制的曲线越光滑,但计算量也越大。需要在效果和性能之间取得平衡。

本章小结

本节我们深入学习了在 Matplotlib 中绘制三维曲线的方法。关键在于使用 Axes3D.plot() 函数,并为其提供三个维度上的一维坐标数组。zdir 参数用于指定第三维数据绘制到哪根坐标轴(默认 Z 轴);需要改变观察角度时则使用 ax.view_init(),两者分工不同,配合使用可以更好地理解和展示多维数据间的关系。

📋 行动清单

  • 在本地环境中成功运行绘制三维螺旋线的示例代码,并看到生成的图形。
  • 尝试修改示例代码中 xline 和 yline 的生成公式(例如,尝试 xline = np.cos(zline * 0.5)),观察会产生什么样子的新曲线。
  • 回忆并总结 Axes3D.plot 与之前学过的二维 plt.plot 在用法上的主要异同点。

—— 小象教研组

配套资料 · 直接下载

课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。

  • 本节课件:3D曲线可视化
    PDF · 203KB
    下载
  • 全套课件打包(第1-5章)
    ZIP · 12.8MB
    下载
  • 全套课件打包(第6-8章)
    ZIP · 15MB
    下载
  • 实战数据集:AppleStore 应用商城分析
    ZIP · 329KB
    下载
  • 实战数据集:女性服装电商分析
    ZIP · 2.8MB
    下载
  • Python 数据分析环境搭建指南
    PDF · 2MB
    下载
  • Scrapy 安装教程
    PDF · 12.7MB
    下载
  • 附加实战项目:AppleStore 应用商城数据分析
    ZIP · 0.3MB · ipynb + CSV 数据
    下载
  • 附加实战项目:银行电话营销数据分析
    ZIP · 0.4MB · ipynb + CSV 数据
    下载
  • 附加实战项目:女性服装电商评论数据分析
    ZIP · 2.7MB · ipynb + CSV 数据
    下载
  • 附加实战项目:美国化学学会杂志数据分析
    ZIP · 34.2MB · ipynb + SQLite 数据库
    下载