Визуализация функции в plotly с помощью слайдеров
Пытаюсь сделать визуализацию влияния коэффициентов линейной функции на её график в задаче линейной регрессии на подобие того как это делается в desmos
Для этого использую следующий код в plotly составленный из кусков чужого кода
import pandas as pd
import numpy as np
import plotly.offline as py
import plotly.graph_objs as go
py.init_notebook_mode(connected=False)
# Create figure
fig = go.Figure(go.Scatter(x=data.Population, y=data.Profit, mode='markers', name='Population&Profit'))
# Add traces, one for each slider step
for step in np.arange(0, 2, 0.1):
x=np.linspace(3, 23, 100)
fig.add_trace(
go.Scatter(
x=x,
y=step*np.linspace(-4,23,100)+step))
# Create and add slider
steps = []
for i in range(len(fig.data)):
step = dict(
method="update",
args=[{"visible": [False] * len(fig.data)},
{"title": "Slider switched to step: " + str(i)}], # layout attribute
)
step["args"][0]["visible"][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()
при передвижении слайдера отрисовывается только новая линия, пробовал добавить отрисовку точек внутрь функции с add_trace
, но это не помогло. Также данная функция по ощущениям не работает как в desmos
+ хотелось бы всё же реализовать так-же слайдеры и для k
и для b
.
Если поменять код следующим образом добавив трейс для точек:
for step in np.arange(0, 2, 0.1):
x=np.linspace(3, 23, 100)
y=step*np.linspace(-4,23,100)+step
fig.add_trace(
go.Scatter(x=data.Population,
y=data.Profit,
mode='markers',
name='Population&Profit')
)
fig.add_trace(
go.Scatter(
x=x,
y=y)
)
то результат будет выглядить вот так:
А при изменении позиции слайдера соответственно отрисовываются сначала точки, а потом линия, и последняя перекрывает точки. Если поменять порядок определения, то наоборот точки перекроют линии, то есть нет эффекта наложения.
Пробовал и определять fig
внутри функции но тогда вообще всё ломается.