如何使用Python和Plotly绘制3D图形
本文分享自华为云社区《Plotly绘制3D图形》 ,作者:柠檬味拥抱。
在数据可视化领域,三维图形是一种强大的工具,可以展示数据之间的复杂关系和结构。Python语言拥有丰富的数据可视化库,其中Plotly是一款流行的工具,提供了绘制高质量三维图形的功能。本文将介绍如何使用Python和Plotly来绘制各种类型的3D图形,并给出代码实例。
准备工作
首先,确保你已经安装了Plotly库。你可以使用pip命令来安装:
pip install plotly
接下来,我们将使用Plotly的plotly.graph_objects模块来创建3D图形。我们还将使用numpy库生成一些示例数据。
import plotly.graph_objects as go
import numpy as np
绘制散点图
首先,我们将绘制一个简单的散点图。假设我们有一些三维数据,分别存储在x_data,y_data和z_data中。
# 生成示例数据
np.random.seed(42)
n_points = 100
x_data = np.random.rand(n_points)
y_data = np.random.rand(n_points)
z_data = np.random.rand(n_points) # 创建散点图
fig = go.Figure(data=[go.Scatter3d(x=x_data, y=y_data, z=z_data, mode='markers')])
fig.update_layout(scene=dict(xaxis_title='X', yaxis_title='Y', zaxis_title='Z'),
title='3D Scatter Plot')
fig.show()
以上代码将生成一个简单的三维散点图,展示了随机生成的数据点在三维空间中的分布情况。
绘制曲面图
接下来,我们将绘制一个曲面图。假设我们有一个函数f(x, y),我们想要可视化它在三维空间中的表面。
# 定义函数
def f(x, y):
return np.sin(x) * np.cos(y) # 生成网格数据
x_grid = np.linspace(0, 2*np.pi, 50)
y_grid = np.linspace(0, 2*np.pi, 50)
x_grid, y_grid = np.meshgrid(x_grid, y_grid)
z_grid = f(x_grid, y_grid) # 创建曲面图
fig = go.Figure(data=[go.Surface(z=z_grid, x=x_grid, y=y_grid)])
fig.update_layout(scene=dict(xaxis_title='X', yaxis_title='Y', zaxis_title='Z'),
title='3D Surface Plot')
fig.show()
以上代码将生成一个展示了函数表面的三维曲面图。
绘制线框图
最后,我们将绘制一个线框图,展示数据的连续性。
# 生成线框数据
theta = np.linspace(-4*np.pi, 4*np.pi, 100)
z_line = np.linspace(-2, 2, 100)
x_line = z_line * np.sin(theta)
y_line = z_line * np.cos(theta) # 创建线框图
fig = go.Figure(data=[go.Scatter3d(x=x_line, y=y_line, z=z_line, mode='lines')])
fig.update_layout(scene=dict(xaxis_title='X', yaxis_title='Y', zaxis_title='Z'),
title='3D Wireframe Plot')
fig.show()
以上代码将生成一个展示了线框的三维图形。
通过以上示例,我们展示了如何使用Python和Plotly来绘制各种类型的三维图形。你可以根据自己的需求进一步定制这些图形,并探索Plotly库中更多丰富的功能。Happy plotting!
绘制3D条形图
除了散点图、曲面图和线框图之外,我们还可以绘制3D条形图,展示数据之间的差异和关系。
# 生成示例数据
categories = ['A', 'B', 'C', 'D']
values = np.random.randint(1, 10, size=(len(categories), len(categories)))
x_bar, y_bar = np.meshgrid(np.arange(len(categories)), np.arange(len(categories)))
x_bar = x_bar.flatten()
y_bar = y_bar.flatten()
z_bar = np.zeros_like(x_bar) # 设置条形图的高度
bar_heights = values.flatten() # 创建3D条形图
fig = go.Figure(data=[go.Bar3d(x=x_bar, y=y_bar, z=z_bar, dx=1, dy=1, dz=bar_heights)])
fig.update_layout(scene=dict(xaxis_title='X', yaxis_title='Y', zaxis_title='Z'),
title='3D Bar Chart')
fig.show()
以上代码将生成一个展示了各种类别和值之间关系的三维条形图。
自定义图形样式
Plotly提供了丰富的自定义选项,可以调整图形的样式、布局和外观。你可以根据需要修改图形的颜色、线型、标签等属性,以满足特定的可视化需求。
# 自定义图形样式
fig.update_traces(marker=dict(color='rgb(255, 127, 14)', size=10),
selector=dict(mode='markers'))
fig.update_layout(scene=dict(xaxis=dict(backgroundcolor="rgb(200, 200, 230)",
gridcolor="white",
showbackground=True,
zerolinecolor="white"),
yaxis=dict(backgroundcolor="rgb(230, 200,230)",
gridcolor="white",
showbackground=True,
zerolinecolor="white"),
zaxis=dict(backgroundcolor="rgb(230, 230,200)",
gridcolor="white",
showbackground=True,
zerolinecolor="white")),
title='Customized 3D Scatter Plot')
fig.show()
交互式三维图形
Plotly还支持创建交互式的三维图形,让用户可以通过鼠标交互来探索数据。下面是一个交互式散点图的示例:
# 创建交互式散点图
fig = go.Figure(data=[go.Scatter3d(x=x_data, y=y_data, z=z_data, mode='markers')])
fig.update_layout(scene=dict(xaxis_title='X', yaxis_title='Y', zaxis_title='Z'),
title='Interactive 3D Scatter Plot')
fig.show()
通过将鼠标悬停在数据点上,用户可以查看每个数据点的具体数值,从而更深入地了解数据。
导出图形
一旦你创建了满意的三维图形,你可以将其导出为静态图片或交互式HTML文件,方便分享和展示。Plotly提供了方便的导出功能,让你可以轻松地保存图形到本地文件。
# 将图形导出为静态图片
fig.write_image("3d_plot.png") # 将图形导出为交互式HTML文件
fig.write_html("3d_plot.html")
探索更多功能
除了本文介绍的功能之外,Plotly还提供了许多其他强大的功能,如动画、子图、相机控制等,可以进一步增强和定制你的三维图形。你可以通过查阅官方文档或参考在线教程来深入了解这些功能,并将其应用到你的项目中。
总结
通过本文,我们学习了如何使用Python和Plotly库绘制各种类型的三维图形,包括散点图、曲面图、线框图和条形图。我们了解了绘制每种图形所需的基本步骤和代码示例,并探索了如何自定义图形样式、创建交互式图形以及将图形导出为静态图片或交互式HTML文件。通过这些技巧和功能,我们可以轻松地在数据可视化领域创建出具有吸引力和实用性的三维图形,从而更好地理解和分析数据。无论是在科学研究、工程应用还是数据分析中,三维图形都是一种强大的工具,帮助我们发现数据之间的模式和关系,以及展示研究成果和洞见。通过不断探索和应用Python和Plotly库的功能,我们可以进一步提升数据可视化的效果和效率,为我们的工作和项目带来更多的价值和成就。
如何使用Python和Plotly绘制3D图形的更多相关文章
- Python 使用 matplotlib绘制3D图形
3D图形在数据分析.数据建模.图形和图像处理等领域中都有着广泛的应用,下面将给大家介绍一下如何在Python中使用 matplotlib进行3D图形的绘制,包括3D散点.3D表面.3D轮廓.3D直线( ...
- Python绘制3D图形
来自:https://www.jb51.net/article/139349.htm 3D图形在数据分析.数据建模.图形和图像处理等领域中都有着广泛的应用,下面将给大家介绍一下如何使用python进行 ...
- Python plot_surface(Axes3D)方法:绘制3D图形
3D 图形需要的数据与等高线图基本相同:X.Y 数据决定坐标点,Z 轴数据决定 X.Y 坐标点对应的高度.与等高线图使用等高线来代表高度不同,3D 图形将会以更直观的形式来表示高度. 为了绘制 3D ...
- 使用OpenGL ES绘制3D图形
如果应用定义的顶点不在同一个平面上,并且使用三角形把合适的顶点连接起来,就可以绘制出3D图形了. 使用OpenGL ES绘制3D图形的方法与绘制2D图形的步骤大致相同,只是绘制3D图形需要定义更多的 ...
- Python使用plotly绘制数据图表的方法
转载:http://www.jb51.net/article/118936.htm 本篇文章主要介绍了Python使用plotly绘制数据图表的方法,实例分析了plotly绘制的技巧. 导语:使用 p ...
- cocos2d-x中绘制3D图形--3D ToolKit for cocos2dx实现原理
首先:了解具体情况请看这里:https://github.com/wantnon2/3DToolKit-for-cocos2dx 在看代码之前,最好还是先把项目git下来执行一下demoproject ...
- Python turtle库绘制简单图形
一.简介 Python中的turtle库是一个直观有趣的图形绘制函数库.turtle库绘制图形有一个基本框架:一个小海龟在坐标系中爬行,其爬行轨迹形成了绘制图形. 二.简单的图形列举 1.绘制4个不同 ...
- python 使用turtule绘制递归图形(螺旋、二叉树、谢尔宾斯基三角形)
插图工具使用Python内置的turtle模块,为什么叫这个turtle乌龟这个名字呢,可以这样理解,创建一个乌龟,乌龟能前进.后退.左转.右转,乌龟的尾巴朝下,它移动时就会画一条线.并且为了增加乌龟 ...
- Mathematica——绘制3D图形
Plot3D Plot3D[ + y, {x, -, }, {y, -, }] ListPointPlot3D 绘制点集 ListPointPlot3D[{{, , }, {, , }}, Color ...
- Python画各种 3D 图形Matplotlib库
回顾 2D 作图 用赛贝尔曲线作 2d 图.此图是用基于 Matplotlib 的 Path 通过赛贝尔曲线实现的,有对赛贝尔曲线感兴趣的朋友们可以去学习学习,在 matplotlib 中,figur ...
随机推荐
- #树状数组#洛谷 4113 [HEOI2012]采花
题目 分析 与HH的项链类似 离线处理询问,按右端点排序,维护最近的颜色和第二近的颜色,修改以第二近的颜色为准 换句话说,若最近颜色的位置为\(pos2\),第二近颜色的位置为\(pos1\) 加入一 ...
- 批量拉取/git pull 指定文件夹下面所有 Git 项目的最新代码
背景 因为工作需要,当前所负责的项目较多:但是人力紧缺,其中绝大部分项目平时也不会去跟进迭代.所以经常需要批量拉取最新的代码查看最新的改动. 解决方案 一键批量拉取指定文件夹下所有 Git 项目的最新 ...
- Mac 使用 Nginx 在本地部署静态网站
安装 安装 Brew /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/i ...
- Linux 编译 libjpeg-9e
jpeg的库有两个:一个是官方的 libjpeg 还有一个是 libjpeg-turbo JPEG库(libjpeg-turbo):https://libjpeg-turbo.org/ Libjpe ...
- vc修改ocx控件classID
背景: 客户希望,classID 为客户自已定义好的一个 ID ,由于我们自动生成的 classID 和客户定义的 ID 不同,所以我们需要修改 classID 为客户指定的 ID 解决方法: 1.打 ...
- 润乾报表与 ActiveReport JS 功能对比
简介 润乾报表是用于报表制作的大型企业级报表软件,核心特点在于开创性地提出了非线性报表数学模型,采用了革命性的多源关联分片.不规则分组.自由格间运算.行列对称等技术,使得复杂报表的设计简单化,以往难以 ...
- 重新点亮linux 命令树————压缩和解压缩[四]
前言 简单整理一下压缩和解压缩. 正文 在windows 中我们使用压缩和解压缩一般是7z这个压缩和解压软件,但是在linux中压缩和解压是两个不同的软件. 在最早的linux 备份介质是磁带,使用的 ...
- 【转】Java程序员常用工具类库 - 目录
原文地址:http://rensanning.iteye.com/blog/1553076 有人说当你开始学习Java的时候,你就走上了一条不归路,在Java世界里,包罗万象,从J2SE,J2ME,J ...
- 编译 OpenCV 的 Python 依赖
这一次编译 OpenCV 的 Python 依赖为了方便运行我们使用 Docker 进行编译,环境准备如下: 系统依赖:Ubuntu 18.04 Python 版本:3.6,Ubuntu 18.04 ...
- 【Oracle】在PL/SQL中使用sql实现选择排序
[Oracle]在PL/SQL中使用sql实现选择排序 一般来说,SQL要排序的话直接使用order by即可 不一般来说,就是瞎搞,正好也可以巩固自己的数据结构基础 使用SQL实现排序系列: 使用S ...