gpt4 book ai didi

python - Plotly:如何使用 DASH 回调将多项式拟合线添加到 plotly go.scatter 图形?

转载 作者:行者123 更新时间:2023-12-03 16:59:22 25 4
gpt4 key购买 nike

我想将多项式曲线添加到使用回调呈现的散点图中。
以下是我的回调函数,它返回散点图。

@app.callback(Output('price-graph', 'figure'),
[
Input('select', 'value')
]
)
def update_price(sub):

if sub:

fig1 = go.Figure(

data=[go.Scatter(

x=dff['Count'],
y=dff['Rent'],
mode='markers'

)
],

layout=go.Layout(

title='',

xaxis=dict(
tickfont=dict(family='Rockwell', color='crimson', size=14)
),

yaxis=dict(

showticklabels = True

),

)
)

return fig1
结果图:
enter image description here
我可以使用 sklearn.preprocessing 添加一条 polyfit 线.
from sklearn.preprocessing import PolynomialFeatures 
from sklearn.linear_model import LinearRegression
from sklearn.pipeline import make_pipeline


dff = df.groupby(['Rent']).size().reset_index(name='Count')

fig = plt.figure(figsize=(15,8))

x = dff['Count']
y = dff['Rent']

model = make_pipeline(PolynomialFeatures(4), LinearRegression())
model.fit(np.array(x).reshape(-1, 1), y)
x_reg = np.arange(90)
y_reg = model.predict(x_reg.reshape(-1, 1))

plt.scatter(x, y)
plt.plot(x_reg, y_reg)
plt.xlim(0,100)
plt.xlabel('Number of rental units leased')
plt.ylim(10,50)
plt.show()
enter image description here
有没有办法在 plotly 中做到这一点?

最佳答案

您尚未指定如何使用 DASH。在此示例中,我在 JupyterLab 中使用 JupyterDASH(是的,这太棒了!)。
下图由下面的代码片段生成。该片段使用回调函数来更改设置多项式特征数量的参数nFeatures在:

 model = make_pipeline(PolynomialFeatures(nFeatures), LinearRegression())
model.fit(np.array(x).reshape(-1, 1), y)
我正在使用 dcc.Slider更改值。
nFeatures = 1 的默认设置
enter image description here
使用 nFeatures = 3 的 slider 选择的设置
enter image description here
完整代码:
import numpy as np
import plotly.express as px
import plotly.graph_objects as go
from jupyter_dash import JupyterDash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output

from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
from sklearn.pipeline import make_pipeline

from IPython.core.debugger import set_trace

# Load Data
df = px.data.tips()
# Build App
app = JupyterDash(__name__)
app.layout = html.Div([
html.H1("ScikitLearn: Polynomial features"),
dcc.Graph(id='graph'),
html.Label([
"Set number of features",
dcc.Slider(id='PolyFeat',
min=1,
max=6,
marks={i: '{}'.format(i) for i in range(10)},
value=1,
)
]),
])

# Define callback to update graph
@app.callback(
Output('graph', 'figure'),
[Input("PolyFeat", "value")]
)

def update_figure(nFeatures):

global model

# data
df = px.data.tips()
x=df['total_bill']
y=df['tip']

# model
model = make_pipeline(PolynomialFeatures(nFeatures), LinearRegression())
model.fit(np.array(x).reshape(-1, 1), y)
x_reg = x.values
y_reg = model.predict(x_reg.reshape(-1, 1))
df['model']=y_reg

# figure setup and trace for observations
fig = go.Figure()
fig.add_traces(go.Scatter(x=df['total_bill'], y=df['tip'], mode='markers', name = 'observations'))

# trace for polynomial model
df=df.sort_values(by=['model'])
fig.add_traces(go.Scatter(x=df['total_bill'], y=df['model'], mode='lines', name = 'model'))

# figure layout adjustments
fig.update_layout(yaxis=dict(range=[0,12]))
fig.update_layout(xaxis=dict(range=[0,60]))
print(df['model'].tail())
return(fig)

# Run app and display result inline in the notebook
app.enable_dev_tools(dev_tools_hot_reload =True)
app.run_server(mode='inline', port = 8070, dev_tools_ui=True, #debug=True,
dev_tools_hot_reload =True, threaded=True)

关于python - Plotly:如何使用 DASH 回调将多项式拟合线添加到 plotly go.scatter 图形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63259394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com