使用 Plotly 的 Slider 交互式绘图

2022-01-21 00:00:00 python plotly

问题描述

如何使用 Plotly 在 Python 中重新创建以下交互式绘图?

How do I recreate the following interactive plot in Python using Plotly?

我的简单示例绘制了一个条形图,其中一列 x 和另一列 1-x.

My simple example draws a bar chart with one column x and another 1-x.

来自 Mathematica 的 GIF:

GIF from Mathematica:

滑块允许在 0 和 1 之间变化 x.

Slider allows for a varying x between 0 and 1.

数学代码:

Manipulate[BarChart[{x, 1 - x}, PlotRange -> {0, 1}], 
    {{x, 0.3, "Level"}, 0, 1, Appearance -> "Open"}]

<小时>

更新

这是一个我不喜欢的解决方案:

Here is a solution which I don't like:

import plotly.graph_objs as go
from plotly.offline import init_notebook_mode, iplot
init_notebook_mode(connected=True)

import ipywidgets as widgets

绘图:

def update_plot(x):
    data = [go.Bar(
                x=['1', '2'],
                y=[x, 1-x]
    )]
    iplot(data, show_link=False)

x = widgets.FloatSlider(min=0, max=1, value=0.3)
widgets.interactive(update_plot, x=x)

这个问题:

  • 当滑块移动时,情节会闪烁
  • 滑块放错位置
  • 增量不够细化
  • 我自己无法指定准确的值

解决方案

从 Plotly 3.0 开始,可以按如下方式实现(在 JupyterLab 中):

Starting from Plotly 3.0 this can be achieved as follows (in JupyterLab):

import plotly.graph_objects as go
from ipywidgets import interact

fig = go.FigureWidget()
bar = fig.add_bar(x=['x', '1-x'])
fig.layout = dict(yaxis=dict(range=[0,1]), height=600)

@interact(x=(0, 1, 0.01))
def update(x=0.3):
    with fig.batch_update():
        bar.y=[x, 1-x]
fig

更新:

从 Plotly 4.0 开始,您需要指定 fig.data[0].y 而不是 bar.y.

From Plotly 4.0 you need to specify fig.data[0].y instead of bar.y.

相关文章