3D分析简明教程

3D分析简明教程

首页角色扮演代号Dark游戏更新时间:2024-05-11

厌倦了 matplotlib 和那些 2000风格的图形? 让我们介绍 3D 分析所需的库。

这个库是 Plotly。 一个可以让你实现高质量图形的软件包。

事实上,使用 Plotly,你可以用很少的代码行快速创建 3D 图形。

NSDT工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - Three.js虚拟轴心开发包

1、plotly.graph_objects

使用 Plotly,你可以轻松创建 3D 图表。

我们从一个非常简单且易于使用 plotly.graph_objects实现的图表开始:

import plotly.graph_objects as go import numpy as np t = np.linspace(0, 20, 100) x, y, z = np.cos(t), np.sin(t), t fig = go.Figure(data=[go.Scatter3d(x=x, y=y, z=z, mode='markers', marker=dict( size=10, color=z, colorscale='plotly3', opacity=0.8, reversescale=True))]) fig.update_layout(margin=dict(l=0, r=0, b=0, t=0)) fig.show()

plotly.graph_objects 使我们能够有效地可视化点云。

可以在这里看到,除了拥有 3D 图形之外,我们还可以将颜色设置为沿轴演变。

事实上,通过标记字典中的 color=z,我们告诉 Plotly z 轴上的点的值越高,颜色应该越深。

简单而有效的结果可以更好地解释数据!

2、plotly.express

让我们继续使用 plotly.express,这是一个更高级的模块。

plotly.express 的特殊性在于,除了制作 3D 图形之外,它还适应我们的数据集。

这里我们采用鸢尾花数据集,其中根据花瓣的大小列出了植物的种类:

import plotly.express as px df = px.data.iris() fig = px.scatter_3d(df, x='sepal_length', y='sepal_width', z='petal_width', color='petal_length', symbol='species') fig.show()

除了显示数据集分布之外, plotly.express 还可以根据植物的特征改变点的颜色。 这里是花瓣的长度( petal_length)。

现在我们可以回到我之前谈论的话题了。

也就是说,花瓣越大,颜色越深,反之亦然。

我们还可以看到,点云的形状根据花的品种而变化。 因此,我们将用圆形表示 setosa 花,用正方形表示 versicolor,用菱形表示 virginica。

在某种程度上,这些特征为图表添加了维度,并可以更好地分析数据。

对于那些像我一样喜欢更现代风格的人来说,我们可以很好地在图表中添加深色主题。

为此,我们只需在代码中添加 template="plotly_dark" 即可。

结果如下:

import plotly.express as px df = px.data.iris() fig = px.scatter_3d(df, x='sepal_length', y='sepal_width', z='petal_width', color='petal_width', symbol='species') fig.update_layout(template="plotly_dark") fig.show()

3、多个 3D 图形

在这里,我们进一步进行定制以显示点云和表面。

事实上,这个表面将代表逻辑回归,这是一个数据科学概念,包括在数据之间建立分离以更好地对它们进行分类。

因此,你可以使用 3D 图形显示点云(基本数据)和逻辑回归(数据分析结果):

import plotly.graph_objects as go import numpy as np from sklearn.datasets import make_blobs #Initialization of Data X, y = make_blobs(n_samples = 100, n_features=2, centers=2, random_state=0) W = np.array([[ 0.50621636], [-1.43113825]]) X0 = np.linspace(X[:, 0].min(), X[:, 0].max(), 100) X1 = np.linspace(X[:, 1].min(), X[:, 1].max(), 100) xx0, xx1 = np.meshgrid(X0,X1) Z = W[0] * xx0 W[1] * xx1 A = 1 / (1 np.exp(-Z)) #Using Plotly fig = (go.Figure(data=[go.Surface(z=A, x=xx0, y=xx1, colorscale='haline', opacity = 0.7)])) fig.add_scatter3d(x=X[:, 0].flatten(), y=X[:, 1].flatten(), z=y.flatten(), mode='markers', marker=dict(size=5, color=y.flatten(), colorscale='haline',opacity=0.9)) fig.update_layout(margin=dict(l=0, r=0, b=0, t=0)) fig.layout.scene.camera.projection.type = "orthographic" fig.show()


原文链接:

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved