我正在尝试在线性回归问题中可视化线性函数的系数对其图形的影响,类似于它在 desmos 中的完成方式
为此,我使用以下代码从其他人的代码片段中编译而成
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
和 for实现相同的滑块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
在函数内部定义它,但随后一切都崩溃了。
我编辑了代码,用带有箭头的注释标记更改:
这是运行代码时的初始图片(现在不是一次显示所有轨迹,而是只显示选定的轨迹):
例如,这里的滑块位于“2”上的图片