在 python 中绘制 3D 绘图

Posted

技术标签:

【中文标题】在 python 中绘制 3D 绘图【英文标题】:Plotly 3D plot in python 【发布时间】:2021-07-21 09:27:52 【问题描述】:

我想在 python 中使用 plotly 制作 3D 绘图。实际上它是动画的第一步,但首先我需要知道如何创建它的 3D 散点图,如下所示,它是在 matplotlib 中制作的。 我有dataset,看起来像这样。

现在,我想根据提到的日期对其进行动画处理,但是我在 plotly 的官方网站上获得的代码是这样的,其中大多数是相似的。

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

现在,我不明白应该如何分配 X,Y and Z 来获得动画情节。因为我需要的所有 13 列都在针对日期的情节中。

作为参考,我发现了这个site 也就是说,

To get a 3D scatter plot you need to specify the trace as a plotly.graph_objs.Scatter3d object or as a dict with a type: 'scatter3d' key.

Feel free to share a full reproducible example if you’d like to work through more of the details.

但这还不够。

请帮我解决这个问题。正确代码或指导的链接对于如何设置变量以获得 3D 绘图动画非常有帮助。谢谢。

【问题讨论】:

【参考方案1】:

为了更新 plotly 中的现有绘图,它们具有FigureWidget 接口。如果您可以在小部件工作的环境中操作(例如 Jupyter notebook),那么以下代码将重复更新现有绘图中的数据。

它不像动画那样很棒。如果在旋转视图时数据更新,它会猛拉回原始位置。所以这不是很好。但是,如果您对这些限制感到满意,那么这将使您入门。

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

import threading
import time
import numpy as np
fw = go.FigureWidget(fig)

def do():
    while True:
        fw.data[0]['x'] = np.random.rand(len(fw.data[0]['x']))
        time.sleep(1)

t = threading.Thread(target=do)
t.start()

fw # run this in cell after which the plot will be generated.

这就是它的外观。请注意旋转视图期间不幸的跳跃。

【讨论】:

我没有使用虹膜集。请在上面提到数据 我认为数据集不是你的问题,而是采取什么方法。我回答了你可以使用什么方法。 另外,如果这就是你想要的,你的问题非常不清楚......请让你的问题更清楚。 我为此向@William 道歉。你的方法确实很有帮助。但是,如果您在数据的屏幕截图中看到,我需要 134 列与日期对应的 3D 列。请帮助我,因为我无法找到正确的代码或指导如何做到这一点。真的很有帮助。谢谢 需要是体积视频是没有意义的。如果数据不是 3 维的,那么将其设为“体积”不会显示任何信息。

以上是关于在 python 中绘制 3D 绘图的主要内容,如果未能解决你的问题,请参考以下文章

麻烦在python中制作3D绘图的动画

Python 使用 matplotlib绘制3D图形

根据 julia 中的数据绘制 3d 表面(使用绘图)

中望3D2022 草图绘制:绘图

Python-Matplotlib可视化(10)——一文详解3D统计图的绘制

python绘图小结(2)