使用 Plotly 的 Slider 交互式绘图
问题描述
如何使用 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
.
相关文章