Python进阶之3D图形

news2024/9/21 16:41:28

Python进阶之3D图形

在数据可视化中,2D图形通常可以满足大多数需求。然而,对于一些复杂的数据或分析,3D图形可以提供更多的视角和洞察。在Python中,使用 MatplotlibPlotly 等库可以轻松创建各种3D图形。本文将介绍如何使用这些工具绘制3D图形,并展示一些高级用法。

1. 使用Matplotlib绘制3D图形

Matplotlib 提供了一个 mplot3d 模块,用于创建3D图形。以下是一些常见的3D图形示例。

1.1 3D散点图
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# 示例数据
np.random.seed(0)
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', marker='o')

ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')
ax.set_title('3D Scatter Plot')

plt.show()

在这里插入图片描述

1.2 3D曲面图
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_surface(x, y, z, cmap='viridis')

ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')
ax.set_title('3D Surface Plot')

plt.show()

在这里插入图片描述

1.3 3D柱状图
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()
ax = fig.add_subplot(projection='3d')
x, y = np.random.rand(2, 100) * 4
hist, xedges, yedges = np.histogram2d(x, y, bins=4, range=[[0, 4], [0, 4]])

# Construct arrays for the anchor positions of the 16 bars.
xpos, ypos = np.meshgrid(xedges[:-1] + 0.25, yedges[:-1] + 0.25, indexing="ij")
xpos = xpos.ravel()
ypos = ypos.ravel()
zpos = 0

# Construct arrays with the dimensions for the 16 bars.
dx = dy = 0.5 * np.ones_like(zpos)
dz = hist.ravel()

ax.bar3d(xpos, ypos, zpos, dx, dy, dz, zsort='average')

plt.show()

在这里插入图片描述

2. 使用Plotly绘制3D图形

Plotly 提供了更为交互的3D图形功能,可以使图表的操作更加灵活和动态。

2.1 3D散点图
import plotly.graph_objs as go
import plotly.offline as pyo

# 示例数据
trace = go.Scatter3d(
    x=np.random.rand(100),
    y=np.random.rand(100),
    z=np.random.rand(100),
    mode='markers',
    marker=dict(size=5, color='blue')
)

layout = go.Layout(
    title='3D Scatter Plot',
    scene=dict(
        xaxis_title='X Label',
        yaxis_title='Y Label',
        zaxis_title='Z Label'
    )
)

fig = go.Figure(data=[trace], layout=layout)
pyo.iplot(fig)

在这里插入图片描述

2.2 3D曲面图
import plotly.graph_objs as go
import plotly.offline as pyo

# 示例数据
x = np.linspace(-5, 5, 50)
y = np.linspace(-5, 5, 50)
x, y = np.meshgrid(x, y)
z = np.sin(np.sqrt(x**2 + y**2))

trace = go.Surface(
    z=z,
    x=x,
    y=y,
    colorscale='Viridis'
)

layout = go.Layout(
    title='3D Surface Plot',
    scene=dict(
        xaxis_title='X Label',
        yaxis_title='Y Label',
        zaxis_title='Z Label'
    )
)

fig = go.Figure(data=[trace], layout=layout)
pyo.iplot(fig)

在这里插入图片描述

2.3 3D网格图
import plotly.graph_objs as go
import plotly.offline as pyo

# 示例数据
x = np.arange(10)
y = np.arange(10)
x, y = np.meshgrid(x, y)
z = np.sin(x) + np.cos(y)

trace = go.Mesh3d(
    x=x.flatten(),
    y=y.flatten(),
    z=z.flatten(),
    i=[0, 1, 2],
    j=[1, 2, 3],
    k=[2, 3, 4],
    opacity=0.5
)

layout = go.Layout(
    title='3D Mesh Plot',
    scene=dict(
        xaxis_title='X Label',
        yaxis_title='Y Label',
        zaxis_title='Z Label'
    )
)

fig = go.Figure(data=[trace], layout=layout)
pyo.iplot(fig)

在这里插入图片描述

3. 3D图形的应用场景
  • 科学数据:如分子结构、地理数据、气象数据等。
  • 工程分析:如应力分布、流体力学等。
  • 数据探索:通过3D图形发现数据中的模式和异常。

结语

3D图形能够提供额外的维度和视角,帮助更全面地理解数据。在Python中,MatplotlibPlotly 提供了丰富的工具来创建和展示3D图形。希望本文的示例和技巧能够帮助你在数据可视化中更好地利用3D图形。如果你有更多的3D图形需求或问题,欢迎在评论区交流和讨论!

试着使用上述方法创建自己的3D图形,并分享你的成果和心得。你也可以尝试将不同的3D图形结合起来,探索它们在数据分析中的应用。完成后,欢迎在评论区留言,我们可以一起讨论如何进一步优化和改进!


为了方便大家交流和学习,建立了一个绘图交流学习群,欢迎大家的加入。

“Python绘图”专栏已完结,后续会出有关具体的图形的绘制教程,感兴趣的可以关注“AIDD Learning”。

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

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

相关文章

C++第一讲:开篇

C第一讲:开篇 1.C历史背景1.1C创世主--本贾尼1.2C版本更新1.3C的重要性1.4C书籍推荐 2.C的第一个程序3.命名空间3.1namespace是什么3.2namespace的使用3.3namespace使用注意事项3.4命名空间的使用 4.C输入和输出5.缺省参数6.函数重载7.引用7.1什么是引用7.2引用的定…

点餐系统软件源码入门教程:从零开始构建你的餐饮系统

随着餐饮行业的数字化转型,点餐系统已经成为餐厅运营不可或缺的一部分。无论是新手开发者还是有经验的程序员,学习如何从零开始构建一个点餐系统,都是一项具有挑战性但又非常有意义的任务。本文将带你逐步了解如何使用基本的技术和代码&#…

E. Lucky Queries

https://codeforces.com/contest/145/problem/E 元素值只有4,7转换成01序列,操作一区间反转,操作二询问类LIS 我们先考虑操作二 应该维护什么量呢 线段树维护量,是通过左子树和右子树的信息合并来维护的 大致有两种情况 可以发现可以通过Leftcnt0Righ…

45.跳跃游戏

:双层for。复杂度n*n n class Solution {public int jump(int[] nums) {// 找到所有的条约方法,返回其中的最小次数// 从后向前,依次记录到最后的次数int n nums.length;if(n 1) return 0;// int[] temp new int[n];// temp[n-1] 0;fo…

Redis远程字典服务器(5) —— hash类型详解

目录 一,hash基本情况 二,hash常用命令详解 2.1 hset,hget,hexists,hdel 2.2 hexists,hdel 2.3 hkeys,hvals 2.4 hgetall,hmget 2.5 hlen,hsetnx 2.6 hincrby&am…

Android逆向题解 攻防世界难度4- Android2.0

Jeb打开apk 关键代码在Native函数getResult IDA 打开 so 发现代码比较简单,可以直接静态分析。 输出字符串也就是flag 长度是15,然后分成三段,第一段是可以整除3,第二段是除3取余1,第三段是除3取余等于2&#xff1…

【Redis进阶】缓存设计模式

目录 Cache Aside(旁路缓存)模式 概念 读操作流程如上图所示 写操作流程如上图所示 代码示例 总结 Read-Through 模式 概念 操作流程: 优点: Write-Through 模式 概念 操作流程: 优点: Writ…

【摄影后期技巧】连拍多张图像中快速找到最清晰的图像——Python代码实现

手持相机高速连拍过程,当快门速度不够高时不可避免出现模糊帧,通过肉眼去从多张连拍图像中找到最清晰的帧是比较费事的,可通过代码自动去计算最清晰的图像,省去挑选图像的麻烦事,同时也可以将模糊图像剔除掉&#xff0…

【Python学习-UI界面】PyQt5 小部件11-Dialog Button Box 确认与取消框

样式如下: 一个预配置的对话框,带有一个文本字段和两个按钮,OK和取消。在用户单击OK按钮或按下Enter键后,父窗口会在文本框中收集输入。 用户输入可以是数字、字符串或列表中的项。还会显示一个提示用户应该做什么的标签。 常用方法如下&…

详细介绍 Vue3 的 watch 和 watchEffect

在 Vue 3 中,watch 和 watchEffect 都是用于响应式地监听数据变化的工具,但它们有不同的使用场景和工作机制。 1. watch 1、概念 watch 是 Vue 3 提供的一个用于观察响应式数据变化并在数据发生变化时执行特定操作的工具。它通常用于执行副作用&#…

LeetCode 热题 HOT 100 (023/100)【宇宙最简单版】

【技巧】No. 0647 回文子串【中等】👉力扣对应题目指路 希望对你有帮助呀!!💜💜 如有更好理解的思路,欢迎大家留言补充 ~ 一起加油叭 💦 欢迎关注、订阅专栏 【力扣详解】谢谢你的支持&#xff…

基于spring boot的疫情信息管理系统

TOC springboot255基于spring boot的疫情信息管理系统 绪论 1.1研究背景与意义 信息化管理模式是将行业中的工作流程由人工服务,逐渐转换为使用计算机技术的信息化管理服务。这种管理模式发展迅速,使用起来非常简单容易,用户甚至不用掌握…

CSC5812C 同步降压5V2.5A DC/DC车载充电方案

CSC5812C 是一款同步降压型的 DC/DC 变换器 IC ,CSC5812C输入电压为 8~30V ,可取得 2.5A恒定输出电流,开关频率 120kHz 左右,具有良好的瞬态响应和环路稳定性。CSC5812C 外围元器件极少,具有线补、过流保护和热保护功能…

Android全面解析之context机制(二): 从源码角度分析context创建流程(上)

前言 这篇文章从源码角度分析context创建流程。 在上一篇Android全面解析之Context机制(一) :初识context一文中讲解了context的相关实现类。经过前面的讨论,读者对于context在心中有了一定的理解。但始终觉得少点什么:activity是什么时候被创建的&…

IDEA终端无法打开,解决方法

检查终端路径: 确保你的系统终端路径被正确设置在你的开发环境或IDE的配置中。例如,在Windows上,这通常是cmd.exe、PowerShell或Git Bash的路径;在macOS或Linux上,这通常是/bin/bash、/bin/zsh等。 2.权限问题&#…

CTFSHOW 萌新 web13 解题思路和方法(利用?>提前结束语句)

点击题目链接,分析代码。发现相比上一关卡,增加过滤了分号。 此时,如果按照之前的方式构造url语句,发现由于分号的存在导致返回cmd error信息。 因为php中最后一行代码的结尾如果不接分号,也会被正常执行。 此时我们可…

Python 设计模式之享元模式

文章目录 从一个 MP3 案例谈起flyweight 模式解决flyweight pattern 的组件拆解定义与逐步实现完整代码 未讨论问题 享元模式( flyweight pattern)属于结构型设计模式,主要用于解决系统中大量创建同一个类的实例时导致的内存激增的问题&…

国产崛起,Solon:我们的性能是 Spring 的 300%

Solon 应用开发框架(java framework)。是从零开始构建,有自主的标准规范与开放生态。纯血国产。 追求: 更快、更小、更简单提倡: 克制、简洁、高效、开放、生态 相对于 Spring 应用开发框架。并发高 300%&#xff1b…

el-cascader多选的父子关联和父子不关联功能

公用html&#xff1a; <el-cascader v-model"data" :options"optionsData" :props"props" clearable> </el-cascader> 公用js变量&#xff1a; data () {return {// 绑定的数组data: [],// 绑定的选项数据optionsData: []} }, 公…