【问题标题】:Is there a better way to use Jupyter IntSlider with Python Plotly?有没有更好的方法将 Jupyter IntSlider 与 Python Plotly 一起使用?
【发布时间】:2019-12-26 15:27:37
【问题描述】:

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

【问题讨论】:

    标签: python jupyter-notebook ipywidgets plotly-python


    【解决方案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()
    

    结果:

    或多点:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-27
      • 2016-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-07
      • 2021-10-02
      • 2011-12-16
      相关资源
      最近更新 更多