大家好,欢迎来到IT知识分享网。
厌倦了 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.], [-1.]]) 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()
原文链接:3D分析简明教程 – BimAnt
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/96172.html