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

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

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

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

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()

原文链接:Fast 3D Data Analysis with this amazing Python library

BimAnt翻译整理,转载请标明出处