如何在回调函数中获取换行符(%s 或 .format)
How to get line breaks in a callback function (%s or .format)
我正在开发 Dash 网络应用程序,其想法是能够根据选定的模型和通过 daq 滑块作为输入给出的一些值来预测结果。
模型的选择(从下拉菜单中)和预测的return(return选择了哪个模型,预测的class(yes/no),以及是和否的概率百分比)效果很好。我的问题是我希望 returned 结果用换行符分隔 - 但它 returns 结果是一个长段落。
回调,看起来像这样(简化版本 + 不包括滑块和下拉菜单的代码):
@callback(Output('slider-container', 'children'),
[Input('model-dropdown', 'value'),
Input('v1', 'value'),
Input('v2', 'value')]
def predict_function(m, v1, v2):
model = models[m]
X_new = np.array([v1, v2])
y_pred = model.predict(X_new)
y_proba = model.predict_proba(X_new)*100
df_proba = pd.DataFrame({'Yes': y_proba[:, 0], 'No': y_proba[:, 1]})
yes = np.round(pd_proba.iloc[0]['Yes'], decimals=5)
no = np.round(pd_proba.iloc[0]['No'], decimals=5)
for i in range(len(X_new)):
return "Model: %s \n" \
"Prediction: %s \n" \
"Probability for Yes: %s \n" \
"Probability for No: %s \n" \
%(m, y_pred[i], yes, no)
结果如下(在 dash 网络应用程序中):
Model: <m> Prediction: <y_pred> Probability for Yes: <yes> Probability for No: <no>
而不是想要的结果:
Model: <m>
Prediction: <y_pred>
Probability for Yes: <yes>
Probability for No: <no>
我已尝试使用一个简单示例来重现该问题。结果中它是 returns \n(它在 Dash 应用程序中不是 return \n - 它只是忽略了 \n,因为它不存在)。我已经尝试过使用 %s 和 .format:
def calc_x(x):
y = x+2
z = y+5
return "X: %s \n Y: %s \n Z: %s" % (x, y, z)
calc_x(5)
# 'X: 5 \n Y: 7 \n Z: 12'
def calc_x(x):
y = x+2
z = y+5
return ('X: {} \n Y: {} \n Z: {}').format(x, y, z)
# 'X: 5 \n Y: 7 \n Z: 12'
calc_x(5)
def calc_x(x):
y = x+2
z = y+5
return ('X: {}\nY: {}\nZ: {}').format(x, y, z)
calc_x(5)
# 'X: 5\nY: 7\nZ: 12'
有谁知道如何解决这个问题?
将以下内容添加到您的 return 声明中
return (html.P(["Model:{}".format(m),html.Br(),"Prediction:{}".format(y_pred[i]),html.Br(),"Probability for Yes:{}".format(yes),html.Br(),"Probability for No:{}".format(no)]))
希望这有效。
我正在开发 Dash 网络应用程序,其想法是能够根据选定的模型和通过 daq 滑块作为输入给出的一些值来预测结果。
模型的选择(从下拉菜单中)和预测的return(return选择了哪个模型,预测的class(yes/no),以及是和否的概率百分比)效果很好。我的问题是我希望 returned 结果用换行符分隔 - 但它 returns 结果是一个长段落。
回调,看起来像这样(简化版本 + 不包括滑块和下拉菜单的代码):
@callback(Output('slider-container', 'children'),
[Input('model-dropdown', 'value'),
Input('v1', 'value'),
Input('v2', 'value')]
def predict_function(m, v1, v2):
model = models[m]
X_new = np.array([v1, v2])
y_pred = model.predict(X_new)
y_proba = model.predict_proba(X_new)*100
df_proba = pd.DataFrame({'Yes': y_proba[:, 0], 'No': y_proba[:, 1]})
yes = np.round(pd_proba.iloc[0]['Yes'], decimals=5)
no = np.round(pd_proba.iloc[0]['No'], decimals=5)
for i in range(len(X_new)):
return "Model: %s \n" \
"Prediction: %s \n" \
"Probability for Yes: %s \n" \
"Probability for No: %s \n" \
%(m, y_pred[i], yes, no)
结果如下(在 dash 网络应用程序中):
Model: <m> Prediction: <y_pred> Probability for Yes: <yes> Probability for No: <no>
而不是想要的结果:
Model: <m>
Prediction: <y_pred>
Probability for Yes: <yes>
Probability for No: <no>
我已尝试使用一个简单示例来重现该问题。结果中它是 returns \n(它在 Dash 应用程序中不是 return \n - 它只是忽略了 \n,因为它不存在)。我已经尝试过使用 %s 和 .format:
def calc_x(x):
y = x+2
z = y+5
return "X: %s \n Y: %s \n Z: %s" % (x, y, z)
calc_x(5)
# 'X: 5 \n Y: 7 \n Z: 12'
def calc_x(x):
y = x+2
z = y+5
return ('X: {} \n Y: {} \n Z: {}').format(x, y, z)
# 'X: 5 \n Y: 7 \n Z: 12'
calc_x(5)
def calc_x(x):
y = x+2
z = y+5
return ('X: {}\nY: {}\nZ: {}').format(x, y, z)
calc_x(5)
# 'X: 5\nY: 7\nZ: 12'
有谁知道如何解决这个问题?
将以下内容添加到您的 return 声明中
return (html.P(["Model:{}".format(m),html.Br(),"Prediction:{}".format(y_pred[i]),html.Br(),"Probability for Yes:{}".format(yes),html.Br(),"Probability for No:{}".format(no)]))
希望这有效。