Python 三维图表绘制指南

Python 三维图表绘制指南

在数据可视化中,三维图表可以更直观地展示数据之间的关系,尤其是当数据具有多个维度时。Python 提供了多个库来绘制三维图表,其中最常用的就是 Matplotlib。本文将介绍如何使用 Matplotlib 绘制三维图表,包括三维散点图、三维线图、三维表面图、三维直方图等。

在这里插入图片描述

1. 安装与导入 Matplotlib

在开始之前,请确保已经安装了 Matplotlib。如果未安装,可以使用以下命令进行安装:

pip install matplotlib

安装完成后,可以通过以下方式导入库:

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

2. 创建三维图表的基础知识

在 Matplotlib 中,绘制三维图表需要使用 mpl_toolkits.mplot3d 中的 Axes3D。首先,需要创建一个三维坐标系,然后才能在其上绘制图表。

2.1 创建三维坐标系

使用 plt.figure() 创建一个新的图形窗口,然后使用 fig.add_subplot() 添加一个三维坐标系:

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

这里 111 表示一个 1x1 的子图,并选择第一个图(即唯一的一个图)。projection='3d' 是关键,表示这是一个三维图。

3. 三维散点图

三维散点图用于展示数据点在三维空间中的分布情况。以下是绘制三维散点图的示例:

# 生成数据
n = 100
x = np.random.rand(n)
y = np.random.rand(n)
z = np.random.rand(n)# 创建图形和三维坐标系
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')# 绘制散点图
ax.scatter(x, y, z, c='r', marker='o')  # 'c' 设置颜色,'marker' 设置点的样式
ax.set_xlabel('X 轴')
ax.set_ylabel('Y 轴')
ax.set_zlabel('Z 轴')
ax.set_title('三维散点图示例')
plt.show()

3.1 散点图参数解释

  • c='r':设置点的颜色为红色。
  • marker='o':设置点的形状为圆形。
  • ax.set_xlabelax.set_ylabelax.set_zlabel:设置坐标轴的标签。

4. 三维线图

三维线图适合用来展示数据点之间的关系,可以显示随时间变化的趋势。以下是绘制三维线图的示例:

# 生成数据
x = np.linspace(0, 5, 100)
y = np.sin(x)
z = np.cos(x)# 创建图形和三维坐标系
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')# 绘制三维线图
ax.plot(x, y, z, color='b', linewidth=2)  # 'b' 设置线条颜色
ax.set_xlabel('X 轴')
ax.set_ylabel('Y 轴')
ax.set_zlabel('Z 轴')
ax.set_title('三维线图示例')
plt.show()

4.1 线图参数解释

  • ax.plot:用于绘制三维线图。
  • linewidth=2:设置线条宽度。

5. 三维表面图

三维表面图用于展示具有表面特征的数据,如地形图、热图等。以下是绘制三维表面图的示例:

# 生成数据
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_surface(x, y, z, cmap='viridis')  # 使用 viridis 颜色映射
ax.set_xlabel('X 轴')
ax.set_ylabel('Y 轴')
ax.set_zlabel('Z 轴')
ax.set_title('三维表面图示例')
plt.show()

5.1 表面图参数解释

  • np.meshgrid:生成网格坐标。
  • ax.plot_surface:用于绘制三维表面图,cmap 参数设置颜色映射。

6. 三维直方图

三维直方图用于展示数据的分布情况,可以帮助我们分析数据的特征。以下是绘制三维直方图的示例:

# 生成数据
data = np.random.randn(1000)# 创建图形和三维坐标系
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')# 绘制三维直方图
hist, xedges, yedges = np.histogram2d(data, data, bins=30)# 创建 X 和 Y 的网格
xpos, ypos = np.meshgrid(xedges[:-1], yedges[:-1], indexing="ij")
xpos = xpos.ravel()
ypos = ypos.ravel()
zpos = 0# 设置柱子的高度
dx = dy = 0.5 * np.ones_like(zpos)
dz = hist.ravel()# 绘制柱状图
ax.bar3d(xpos, ypos, zpos, dx, dy, dz, zsort='average')
ax.set_xlabel('X 轴')
ax.set_ylabel('Y 轴')
ax.set_zlabel('频率')
ax.set_title('三维直方图示例')
plt.show()

6.1 直方图参数解释

  • np.histogram2d:计算二维直方图。
  • ax.bar3d:用于绘制三维柱状图。

7. 自定义三维图表

7.1 设置图例

在三维图表中,我们同样可以添加图例,以帮助观众理解数据的含义:

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')# 绘制多个数据集
ax.scatter(x, y, z, c='r', marker='o', label='数据点1')
ax.scatter(x+1, y+1, z+1, c='g', marker='^', label='数据点2')
ax.legend()  # 添加图例
plt.show()

7.2 设置视角

可以通过 ax.view_init 方法来调整三维图的视角,以便更好地查看数据:

ax.view_init(elev=20, azim=30)  # 设置观察角度

7.3 保存图表

使用 plt.savefig() 方法可以将图表保存为文件:

plt.savefig('3d_plot.png')  # 保存为 PNG 格式

8. 结合其他库进行三维可视化

除了 Matplotlib,Python 还有其他库可以进行三维可视化,比如 MayaviPlotly。这两个库在交互性和效果上有更好的表现,可以根据具体需求选择使用。

8.1 使用 Plotly 绘制三维图

Plotly 是一个强大的图形库,可以轻松绘制交互式图表。以下是绘制三维散点图的示例:

import plotly.express as px
import pandas as pd# 生成数据
n = 100
df = pd.DataFrame({'x': np.random.rand(n),'y': np.random.rand(n),'z': np.random.rand(n)
})# 绘制三维散点图
fig = px.scatter_3d(df, x='x', y='y', z='z')
fig.show()

8.2 使用 Mayavi 绘制三维表面图

Mayavi 是一个用于 3D 数据可视化的库,尤其适合科学计算。以下是一个简单的示例:

from mayavi import mlab
import numpy as np# 生成数据
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))# 绘制三维表面图
mlab.surf(x, y, z)
mlab.show()

9. 总结

通过本文的介绍,相信您已经掌握了如何使用 Python 中的 Matplotlib 绘制三维图表。我们讨论了三维散点图、线图、表面图、直方图等的绘

制方法,并展示了如何自定义图表属性和设置图例。此外,还提到了一些其他库(如 Plotly 和 Mayavi)用于三维可视化的使用场景。

三维图表可以帮助我们更好地理解和分析数据,在实际应用中,我们可以根据具体的需求选择合适的图表类型和库。希望本文能为您的数据可视化之旅提供一些帮助!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/5778.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

粒子群优化双向深度学习!PSO-BiTCN-BiGRU-Attention多输入单输出回归预测

粒子群优化双向深度学习!PSO-BiTCN-BiGRU-Attention多输入单输出回归预测 目录 粒子群优化双向深度学习!PSO-BiTCN-BiGRU-Attention多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现PSO-BiTCN-BiGRU-Attention粒子…

智能离线语音识别不灵敏?如何改善和提升识别率?

前言 有用户反馈离线语音识别不灵敏,跟着笔者一起分析原因吧。笔者知识能力有限,难免会误,还请大家批评指正。 1 影响离线语音识别的因素 笔者分析离线语音识别不灵敏的原因有以下几点 1.1 运行硬件的算力限制 由于离线语音识别在本地MCU…

7.qsqlquerymodel 与 qtableview使用

目录 qtableview 委托QStyledItemDelegateQAbstractItemDelegateCheckBoxItemDelegate使用qtableview控制列宽,行高,隐藏拖拽行列 qtableview 委托 //设置单元格委托 void setItemDelegate(QAbstractItemDelegate *delegate); QAbstractItemDelegate *it…

加入广告联盟有什么条件吗?

加入广告联盟往往并非是一件轻而易举的事情,而是需要满足一系列特定的条件。这些条件的确会因不同的广告联盟而存在显著的差异,然而,以下所列举的是一些在众多广告联盟中较为常见的加入条件。 首先,内容合规是至关重要的一点。发…

实时计算 Flash – 兼容 Flink 的新一代向量化流计算引擎

摘要:本文整理自阿里云智能集团研究员、开源大数据平台负责人王峰(莫问)老师在云栖大会的开源大数据专场上的分享。主要有以下几个内容: 1. Apache Flink 已经成为业界流计算事实标准 2. Flash 向量化流计算引擎核心技术解读 3. F…

springboot《计算机网络》在线考试系统-计算机设计毕业源码22248

摘要 计算机网络课程是计算机科学与技术、信息技术及相关专业的一门重要课程。然而,在传统的教育模式下,计算机网络课程的考核方式多以纸质试卷为主,这种方式存在诸多弊端。一方面,试卷的编制、印刷、分发、收缴等环节耗时耗力&am…

【K8S系列】Kubernetes 中 Service 更改未生效的故障排查与解决方案【已解决】

在 Kubernetes 中,Service 是实现 Pod 之间通信的核心组件。当您对 Service 进行更改(如修改端口或选择器)时,有时可能会发现这些更改未能生效,导致服务无法正常工作。本文将详细描述这一问题,并提供故障排…

【C++】AVL树

🔥个人主页🔥:孤寂大仙V 🌈收录专栏🌈:C从小白到高手 🌹往期回顾🌹:【C】STL----map和set 🔖 流水不争,争的是滔滔不息 AVL树通过维护树的平衡来确…

用Puppeteer点击与数据爬取:实现动态网页交互

用Puppeteer与代理IP抓取51job招聘信息:动态网页交互与数据分析 引言 在数据采集领域,传统的静态网页爬虫方式难以应对动态加载的网页内容。动态网页通常依赖JavaScript加载数据,用户需要与页面交互才能触发内容显示。因此,我们…

砥砺十年风雨路,向新而行创新程丨怿星科技十周年庆典回顾

10月24日,是一年中的第256天,也是程序员节,同时也是怿星的生日。2014年到2024年,年华似水匆匆一瞥,多少岁月轻描淡写,怿星人欢聚一堂,共同为怿星科技的十周年庆生! 01.回忆往昔&…

【vue-pdf】简单封装pdf预览组件

【vue-pdf】简单封装pdf预览组件 在Vue中使用vue-pdf来展示PDF文件,首先需要安装vue-pdf: npm i vue-pdf或者 yarn add vue-pdf然后在Vue组件中引入并使用vue-pdf: /** * 描述: pdf预览组件 * 作者: xingyue * 创建时间: 2024-11-05 14:27…

HTML 标签属性——id、class、style 等全局属性详解

文章目录 1. id属性2. class属性3. style属性4. title属性5. lang属性6. dir属性7. accesskey属性8. tabindex属性小结HTML全局属性是一组可以应用于几乎所有HTML元素的特殊属性。这些属性提供了额外的功能和信息,使得网页开发者能够更好地控制元素的行为、样式和可访问性。 …

Dubbo详解及其应用

Dubbo Dubbo是一个阿里巴巴开源的高性能Java RPC框架,专为解决大规模微服务架构中的服务治理、服务发现、负载均衡和远程通信等问题而设计。它允许服务提供者将业务功能封装成服务,而服务消费者则可以像调用本地方法一样调用这些远程服务,从而…

python爬取旅游攻略(1)

参考网址: https://blog.csdn.net/m0_61981943/article/details/131262987 导入相关库,用get请求方式请求网页方式: import requests import parsel import csv import time import random url fhttps://travel.qunar.com/travelbook/list.…

推荐一款便捷的图像处理工具:Photo Collage Maker

Photo Collage Maker是一款便捷的图像处理工具,能够对图像进行拼接和剪辑,帮助用户轻松实现各类图像效果的添加。该软件支持图片框的添加以及图片分享功能,适合用于制作照片拼贴、个性化相册、美丽的剪贴簿等创意项目。 软件特点 简单易用 …

yolo v5 开源项目

项目地址:https://gitcode.net/EricLee/yolo_v5

《化纤与纺织技术》是什么级别的期刊?是正规期刊吗?能评职称吗?

问题解答 问:《化纤与纺织技术》是不是核心期刊? 答:不是,是知网收录的第一批认定学术期刊。 问:《化纤与纺织技术》级别? 答:省级。主管单位:广东粤能(集团&#xf…

Python 爬取大量数据如何并发抓取与性能优化

Python 并发抓取与性能优化 在进行网络爬虫开发时,爬取大量数据可能非常耗时。尤其是在处理许多网页或 API 请求时,逐个请求速度会非常慢。为了解决这个问题,我们可以通过并发抓取提高爬取效率。同时,通过性能优化来进一步减少耗…

Centos开机自启动脚本示例

本文建议创建一个sh文件管理自启动的各项内容,再将sh文件设置开机启动 在/root/autoshell下创建一个autostart.sh,内容如下 #!/bin/bash # description:开机自启脚本# 启动mongodb sh /root/software/mongodb-linux-x86_64-rhel70-4.0.6/bin/mongod --c…

猫头虎分享: AI设计利器 Recraft详解与基础使用教程

🦁猫头虎分享:AI设计利器 Recraft——全面解析与教程 大家好,我是猫头虎!今天为大家带来一款非常炙手可热的 AI 设计工具 —— Recraft 的深度介绍与详细教程。这款工具自推出以来,就迅速获得了全球设计师的青睐。那么…