厌倦了 matplotlib 和那些 2000风格的图形? 让我们介绍 3D 分析所需的库。
这个库是 Plotly。 一个可以让你实现高质量图形的软件包。
事实上,使用 Plotly,你可以用很少的代码行快速创建 3D 图形。
1、plotly.graph_objectsNSDT工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - Three.js虚拟轴心开发包
使用 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