有没有更好的方法将 Jupyter IntSlider 与 Python Plotly 一起使用?

Is there a better way to use Jupyter IntSlider with Python Plotly?

在下面的代码块中,我使用 Jupyter IntSlider 来调整 Plotly express 散点图 3d 图中可视化的点数。该示例已经适合我的用例,但我注意到 Plotly 有 built-in slider functionalities 可以提高性能。

作为 Plotly 的初学者,我发现很难将滑块示例从 Plotly 映射到我的用例。 有什么建议吗?

import numpy as np
import plotly.express as px
import pandas as pd
from ipywidgets import interact, widgets

NUM_DOTS = 100
NUM_DIMS = 3

random_data = pd.DataFrame(np.random.random((NUM_DOTS,NUM_DIMS) ), columns=['x_1','x_2','x_3'])

def update_plotly(x):
    fig = px.scatter_3d(random_data[:x], x='x_1', y='x_2', z='x_3')
    fig.show()

interact(update_plotly, x=widgets.IntSlider(min=1, max=NUM_DOTS, step=1, value=NUM_DOTS))

其实制作slider并不难,按照plotly示例的路径即可:

import plotly.graph_objects as go
import numpy as np

NUM_DOTS = 100
NUM_DIMS = 3

# Create figure
fig = go.Figure()

# Add traces, one for each slider step
for step in np.arange(1, NUM_DOTS, 1):

    #Random data
    random_data = pd.DataFrame(np.random.random((step, NUM_DIMS)), columns=['x_1','x_2','x_3'])

    fig.add_trace(
        go.Scatter3d(
            visible=False,
            line=dict(color="#00CED1", width=6),
            name=" = " + str(step),
            z=random_data['x_3'],
            x=random_data['x_1'],
            y=random_data['x_2']))

# Make 10th trace visible
fig.data[10].visible = True

# Create and add slider
steps = []
for i in range(len(fig.data)):
    step = dict(
        method="restyle",
        args=["visible", [False] * len(fig.data)],
    )
    step["args"][1][i] = True  # Toggle i'th trace to "visible"
    steps.append(step)

sliders = [dict(
    active=10,
    currentvalue={"prefix": "Frequency: "},
    pad={"t": 50},
    steps=steps
)]

fig.update_layout(
    sliders=sliders
)

fig.show()

结果:

或有更多积分:

正如您所理解的那样,它比小部件滑块的性能更高,因为使用这种方法,您只需切换 3D 散点图中的跟踪可见性。