首页 > 编程语言 >如何使用Python和Plotly绘制3D图形

如何使用Python和Plotly绘制3D图形

时间:2024-05-17 09:42:59浏览次数:22  
标签:title Python fig Plotly np 图形 data 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_datay_dataz_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库的功能,我们可以进一步提升数据可视化的效果和效率,为我们的工作和项目带来更多的价值和成就。

 

点击关注,第一时间了解华为云新鲜技术~

 

标签:title,Python,fig,Plotly,np,图形,data,3D
From: https://www.cnblogs.com/huaweiyun/p/18197223

相关文章

  • python折线图包括设置横纵坐标字体大小刻度间隔等
    直径上代码#!usr/bin/envpython#-*-coding:utf-8-*-"""@author:Suyue@file:dryzhexian.py@time:2024/05/16@desc:"""importpandasaspdimportmatplotlibimportmatplotlib.pyplotaspltimportmatplotlib.tickerasticker......
  • Python03判断语句
    Python03判断语句比较运算符if语句......
  • Python进阶之实现单例模式的常见方法
    【一】单例模式介绍【1】什么是单例模式一个类只允许创建一个对象(或者实例),那这个类就是一个单例类,这种设计模式就叫作单例设计模式,简称单例模式【2】为什么要学单例模式当一个类的功能比较单一,只需要一个实例对象就可以完成需求时,就可以使用单例模式来节省内存资源【3】......
  • Python 类
    类的特殊方法call假设我们有一个类Calculator,它有一个__call__方法,用来计算两个数的和。代码如下:classCalculator:def__call__(self,a,b):returna+bcalc=Calculator()result=calc(3,5)print(result)在这个例子中,我们定义了一个Calculator类,其......
  • Python中解压一个包含中文文件名的ZIP文件到指定的目录
    要在Python中解压一个包含中文文件名的ZIP文件到指定的目录,你可以指定解压文件时所需的字符编码。下面是一个示例代码:importzipfileimportoszip_file_path='/path/to/your/chinese_file.zip'extract_dir='/path/to/extract/directory'#创建一个解压目标目录os.make......
  • python 逆向
    python逆向也是CTFreverse的一个重要组成部分(废话)。题目一般会给一个exe文件或者pyc文件。工具工欲善其事,必先利其器,好的工具是必不可少的。exe转pyc工具:GitHub-WithSecureLabs/python-exe-unpacker:AhelperscriptforunpackinganddecompilingEXEsco......
  • Python基础02
    Python基础02基础语法字面量掌握字面量的含义代码中,被写在代码中的固定的值,称之为字面量常见的字面量类型我们目前了解:整数、浮点数、字符串这三类即可如何基于print语句完成各类字面量的输出print(字面量),如:print(10),输出整数10print(13.14),输出浮点数13.......
  • python的一些常用编码技巧(持续更新)
    语法问题我常用的库函数1copy库importcopycopy.deepcopy()2、list库fromtypingimportList获取迭代对象的第一个值方法一:使用list方法my_dict={'a':1,'b':2,'c':3}first_key=list(my_dict.keys())[0]print(first_key)#输出:'a'方法二:使......
  • 数据结构简介及PYTHON里的数据类型
    1、什么是数据结构?先介绍几个概念。信息是目前在生活和工作中最经常听到的一个词,但要给信息这个概念一个容易理解的确切定义并不容易。人们希望用计算机处理的终极对象就是客观存在的各种信息,因此说计算机是处理信息的工具。数据是信息的载体,是指计算机(程序)能够处理的符号形式......
  • 电子书自由:python生成epub电子书
    前言最近在看《剑来》小说,但是kindle在线看不方便,而且我在网上找到的只有600多章,目前最新已经更新到了1200章,为了确保后面有书可读,同时也为了巩固下python技能,于是我找到一个免费的网站,然后通过python获取书籍内容,最终将获取到的内容,生成epub电子书,核心内容如下:获取电子书的内......