【100天精通Python】Day65:Python可视化_Matplotlib3D绘图mplot3d,绘制3D散点图、3D线图和3D条形图,示例+代码

简介: 【100天精通Python】Day65:Python可视化_Matplotlib3D绘图mplot3d,绘制3D散点图、3D线图和3D条形图,示例+代码

1  mpl_toolkits.mplot3d  功能介绍

 mpl_toolkits.mplot3d 是 Matplotlib 库中的一个子模块,用于绘制和可视化三维图形,包括三维散点图、曲面图、线图等。它提供了丰富的功能来创建和定制三维图形。以下是 mpl_toolkits.mplot3d 的主要功能和功能简介:

  1. 3D 散点图:通过 scatter 函数,你可以绘制三维散点图,用于显示三维数据点的分布和关系。
  2. 3D 曲面图:使用 plot_surface 函数,可以创建三维曲面图,用于可视化三维数据的表面形状。这对于显示函数的三维性质非常有用。
  3. 3D 线图plot 函数允许你绘制三维线图,用于表示数据点之间的连接关系。这对于显示数据随时间或其他变量的变化趋势非常有用。
  4. 3D 条形图:通过 bar3d 函数,你可以创建三维柱状图,用于比较不同类别或组的数据。
  5. 3D 散点图标记和颜色:你可以根据数据的特性来定制散点图的标记形状和颜色,以区分不同的数据点。
  6. 3D 坐标轴定制:你可以设置和定制三维图的坐标轴,包括添加标签、设置刻度和范围等。
  7. 图形样式定制:你可以设置图形的样式,包括标题、图例、背景色、线条样式和颜色等,以使图形更具吸引力和可读性。
  8. 3D 投影mpl_toolkits.mplot3d 支持不同类型的三维投影,包括透视投影和正交投影,以满足不同的可视化需求。
  9. 动画和交互性:你可以在三维图中添加动画效果或交互式元素,以更好地探索数据。
  10. 多图形组合:你可以在同一个三维图中组合多个不同类型的图形,以展示多个数据系列。
  11. 保存图形:最后,你可以将绘制的三维图形保存为图像文件,以便在文档中使用或与他人分享。
  12.        总之,mpl_toolkits.mplot3d 子模块为 Matplotlib 提供了强大的三维可视化工具,可以用于可视化和分析三维数据。根据你的需求,你可以选择不同的图形类型和样式来呈现数据,以便更好地理解和传达你的发现。

在 Matplotlib 的 mpl_toolkits.mplot3d 模块中,绘制 3D 图的一般流程包括以下步骤:

(1)导入必要的库和模块:

import matplotlib.pyplot as plt 
from mpl_toolkits.mplot3d import Axes3D

(2)创建一个 3D 图形的绘图对象:

fig = plt.figure()

(3) 创建一个 3D 子图:

ax = fig.add_subplot(111, projection='3d')

(4) 准备数据:定义 X、Y 和 Z 数据,这些数据将在 3D 图中表示。

  1. 使用相应的 3D 绘图函数来绘制数据,例如:
  • 散点图:ax.scatter(x, y, z, c='color', marker='marker_style', label='label')
  • 曲面图:ax.plot_surface(X, Y, Z, cmap='colormap')
  • 线图:ax.plot(x, y, z, label='label')
  • 柱状图:ax.bar3d(x, y, z, dx, dy, dz, shade=True)

(5)添加坐标轴标签:

ax.set_xlabel('X轴标签') 
ax.set_ylabel('Y轴标签') 
ax.set_zlabel('Z轴标签')

(6)添加标题:

plt.title('3D 图标题')

(7)添加图例(如果需要):

ax.legend()

(8)显示图形:

plt.show()

2 绘制3D散点图

       在matplotlib的mpl_toolkits.mplot3d模块中,你可以使用`scatter`函数绘制多种类型的3D散点图。

下面是一些常见的3D散点图类型:

2.1 绘制单色散点图

   所有的散点都使用相同的颜色。可以通过设置`c`参数指定颜色。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 创建数据
x = np.random.rand(100)
y = np.random.rand(100)
z = np.random.rand(100)
# 创建图形和轴
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# 绘制单色散点图
ax.scatter(x, y, z, c='blue')
# 设置坐标轴标签
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
# 显示图形
plt.show()

2.2 绘制彩色散点图

       不同的散点可以使用不同的颜色。可以通过设置`c`参数为一个具有相同长度的数组来指定每个散点的颜色。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 创建数据
x = np.random.rand(100)
y = np.random.rand(100)
z = np.random.rand(100)
colors = np.random.rand(100)
# 创建图形和轴
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# 绘制彩色散点图
ax.scatter(x, y, z, c=colors)
# 设置坐标轴标签
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
# 显示图形
plt.show()

2.3 绘制大小变化散点图

       散点的大小可以根据某个特征进行变化。可以通过设置`s`参数为一个具有相同长度的数组来指定每个散点的大小。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 创建数据
x = np.random.rand(100)  # x坐标
y = np.random.rand(100)  # y坐标
z = np.random.rand(100)  # z坐标
colors = np.random.rand(100)  # 散点颜色
sizes = np.random.randint(low=50, high=200, size=100)  # 散点大小
# 创建图形和轴
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# 绘制散点图
ax.scatter(x, y, z, c=colors, s=sizes, alpha=0.8)
# 设置坐标轴标签
ax.set_xlabel('X')  # 设置x轴标签
ax.set_ylabel('Y')  # 设置y轴标签
ax.set_zlabel('Z')  # 设置z轴标签
# 显示图形
plt.show()

2.4 绘制形状变化散点图

       散点的形状可以根据某个特征进行变化。可以通过设置`marker`参数来指定散点的形状。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 创建数据
x = np.random.rand(100)
y = np.random.rand(100)
z = np.random.rand(100)
markers = ['o', 's', '^', 'D']
# 创建图形和轴
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# 绘制形状变化散点图
for i in range(len(x)):
    ax.scatter(x[i], y[i], z[i], marker=markers[i%len(markers)])
# 设置坐标轴标签
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
# 显示图形
plt.show()

3 绘制3D线图

       使用mpl_toolkits.mplot3d模块中的Axes3D对象绘制3D线图。

3.1 简单线图

       使用`plot`函数绘制简单的曲线。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 创建数据
x = np.linspace(0, 1, 100)
y = np.sin(2 * np.pi * x)
z = np.cos(2 * np.pi * x)
# 创建图形和轴
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# 绘制简单线图
ax.plot(x, y, z)
# 设置坐标轴标签
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
# 显示图形
plt.show()

3.2 绘制多线图

       使用`plot`函数绘制多条线并在同一图表中显示。

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']
# 创建示例数据
t = np.linspace(0, 20, 100)  # 时间或X轴数据
x1 = np.sin(t)
y1 = np.cos(t)
z1 = t
x2 = np.sin(t) + 2
y2 = np.cos(t) + 2
z2 = t
# 创建图形和子图
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# 绘制第一条线
ax.plot(x1, y1, z1, label='线1', color='blue', linestyle='-', linewidth=2)
# 绘制第二条线
ax.plot(x2, y2, z2, label='线2', color='red', linestyle='--', linewidth=2)
# 添加标题
plt.title('三维多线图示例')
# 添加坐标轴标签
ax.set_xlabel('X轴')
ax.set_ylabel('Y轴')
ax.set_zlabel('Z轴')
# 添加图例
ax.legend()
# 显示图形
plt.show()

3.3  绘制带标记的线图

       使用`plot`函数,并通过设置`marker`参数来添加线上的标记点。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 创建数据
x = np.linspace(0, 1, 100)
y = np.sin(2 * np.pi * x)
z = np.cos(2 * np.pi * x)
# 创建图形和轴
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# 绘制带标记的线图
ax.plot(x, y, z, marker='o')
# 设置坐标轴标签
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
# 显示图形
plt.show()

3.4  绘制立体网格线图

       使用`plot_wireframe`函数在3D空间中绘制网格线图。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 创建数据
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X ** 2 + Y ** 2))
# 创建图形和轴
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# 绘制立体网格线图
ax.plot_wireframe(X, Y, Z)
# 设置坐标轴标签
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
# 显示图形
plt.show()

3.5  绘制等高线图

       使用`contour`或`contourf`函数在3D空间中绘制等高线。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 创建数据
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X**2 + Y**2))
# 创建图形和轴
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# 绘制3D等高线图
ax.contour3D(X, Y, Z, 50, cmap='viridis')
# 设置坐标轴标签
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
# 显示图形
plt.show()

4 绘制3D条形图

       在matplotlib中,由于 mpl_toolkits.mplot3d模块的限制,没有直接绘制3D的条形图的函数。不过你可以使用 bar3d函数绘制类似的3D条形图效果。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 创建数据
x = [1, 2, 3, 4, 5]  # x轴坐标位置
y = [1, 2, 3, 4, 5]  # y轴坐标位置
z = [0, 3, 2, 5, 1]  # z轴高度,即条形的高度
dx = dy = 0.8  # x和y方向的宽度
dz = z  # 条形的高度
colors = ['red', 'green', 'blue', 'orange', 'purple']  # 颜色列表,一一对应于每个条形
# 创建图形和轴
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# 绘制3D条形图,并设置每个条形的颜色
for xi, yi, zi, color in zip(x, y, z, colors):
    ax.bar3d(xi, yi, 0, dx, dy, zi, color=color)
# 设置坐标轴标签
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
# 显示图形
plt.show()

目录
相关文章
|
3月前
|
机器学习/深度学习 监控 数据可视化
127_训练可视化:曲线分析工具 - 使用Matplotlib诊断过拟合的独特信号与深度训练状态解析
在2025年的LLM训练环境中,随着模型规模和复杂度的指数级增长,训练过程的可视化已经从简单的性能监控工具演变为模型健康状态的诊断系统。训练可视化不仅仅是绘制几条曲线,而是构建一个完整的训练神经系统,能够实时捕捉训练动态、预测潜在问题、优化训练策略,并最终确保模型达到最佳性能。
|
6月前
|
JSON API 数据格式
洋码头商品 API 示例指南(Python 实现)
洋码头是国内知名跨境电商平台,提供商品搜索、详情、分类等API接口。本文详解了使用Python调用这些API的流程与代码示例,涵盖签名生成、请求处理及常见问题解决方案,适用于构建选品工具、价格监控等跨境电商应用。
|
6月前
|
JSON API UED
运营商二要素验证 API:核验身份的一致性技术实践(Python示例)
随着线上业务快速发展,远程身份核验需求激增。运营商二要素验证API通过对接三大运营商实名数据,实现姓名、手机号、身份证号的一致性校验,具备权威性高、实时性强的优势,广泛应用于金融、电商、政务等领域。该接口支持高并发、低延迟调用,结合Python示例可快速集成,有效提升身份认证的安全性与效率。
678 0
|
6月前
|
JSON API 数据格式
Python采集京东商品评论API接口示例,json数据返回
下面是一个使用Python采集京东商品评论的完整示例,包括API请求、JSON数据解析
|
6月前
|
测试技术 API 开发者
淘宝关键词搜索商品列表API接入指南(含Python示例)
淘宝关键词搜索商品列表API是淘宝开放平台的核心接口,支持通过关键词检索商品,适用于比价、选品、市场分析等场景。接口提供丰富的筛选与排序功能,返回结构化数据,含商品ID、标题、价格、销量等信息。开发者可使用Python调用,需注意频率限制与错误处理,建议先在沙箱环境测试。
|
5月前
|
数据采集 索引 Python
Python Slice函数使用教程 - 详解与示例 | Python切片操作指南
Python中的`slice()`函数用于创建切片对象,以便对序列(如列表、字符串、元组)进行高效切片操作。它支持指定起始索引、结束索引和步长,提升代码可读性和灵活性。
|
6月前
|
JSON API 开发者
一号店商品 API 示例指南(Python 实现)
本教程介绍如何使用 Python 调用一号店商品 API,涵盖商品搜索、详情、分类等接口的调用方法。内容包括注册认证、签名生成、代码实现及常见问题解决方案,并提供完整示例代码,帮助开发者快速接入一号店开放平台,构建电商工具与数据分析应用。
|
人工智能 数据挖掘 数据处理
揭秘Python编程之美:从基础到进阶的代码实践之旅
【9月更文挑战第14天】本文将带领读者深入探索Python编程语言的魅力所在。通过简明扼要的示例,我们将揭示Python如何简化复杂问题,提升编程效率。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开一扇通往高效编码世界的大门。让我们开始这段充满智慧和乐趣的Python编程之旅吧!
|
机器学习/深度学习 数据采集 人工智能
探索机器学习:从理论到Python代码实践
【10月更文挑战第36天】本文将深入浅出地介绍机器学习的基本概念、主要算法及其在Python中的实现。我们将通过实际案例,展示如何使用scikit-learn库进行数据预处理、模型选择和参数调优。无论你是初学者还是有一定基础的开发者,都能从中获得启发和实践指导。
215 2
|
机器学习/深度学习 Python
时间序列特征提取:从理论到Python代码实践
时间序列是一种特殊的存在。这意味着你对表格数据或图像进行的许多转换/操作/处理技术对于时间序列来说可能根本不起作用。
511 1
时间序列特征提取:从理论到Python代码实践

热门文章

最新文章

推荐镜像

更多