有更好的方法将Jupyter IntSlider与Python Plotly结合使用吗?

时间:2019-12-26 15:27:37

标签: python jupyter-notebook ipywidgets plotly-python

在以下代码块中,我使用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))

1 个答案:

答案 0 :(得分:1)

实际上,构建滑块并不难,只需按照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()

结果:

enter image description here

或获得更多分:

enter image description here

您正确地发现,它比小部件滑块具有更高的性能,因为使用此方法,您只需在3D散点图中切换跟踪可见性即可。