Возможно, вы выбрали неверный результат, когда фильтруете информационный кадр по value
, предоставленному из dropdown
. Код:
from flask import Flask
import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
import pandas as pd
import plotly
import plotly.graph_objs as go
server = Flask(__name__)
app = dash.Dash(server=server)
df = pd.DataFrame({"Pos": [4, 5, 7, 8],
"Neg": [3, 6, 8, 9],
"Compound": [7, 11, 15, 17],
"values": [1, 2, 3, 4]})
app.layout = html.Div(
[
html.H1("Scatter with dropdown"),
dcc.Dropdown(
id='dropdown',
options=[{'label': 'Pos', 'value': 'Pos'},
{'label': 'Neg', 'value': 'Neg'},
{'label': 'Compound', 'value': 'Compound'}],
value='Compound'
),
html.Div(id='scatter'),
])
@app.callback(
Output("scatter", "children"),
[Input("dropdown", "value")],
)
def change_scatter(value):
"""Change scatter according to dropdown."""
global df
dff = df[['values', value]]
return html.Div(dcc.Graph(
id='scatter-plot',
figure={
'data': [
{
'x': dff['values'],
'y': dff[value],
'type': 'scatter',
# 'text': dff[value],
'name': value
}
],
'layout': {
'xaxis': {'title': 'Position'},
'yaxis': {'title': 'Values'},
}
}
))
if __name__ == "__main__":
app.run_server(debug=True, port=8888)
Во-первых, приоритет здесь не является проблемой, потому что foo = bar || (* zap)
работает не лучше. Основное правило заключается в том, что вы не можете выполнять дополнительные операции с восклицательным знаком. Даже что-то простое, например foo = (* zap)
, недопустимо. Это относится и к 1.9.
Сказав, что вы ожидаете foo = bar || * Зап
сделать, если это сработало, что отличается от foo = bar || зап
? Даже в случае, подобном a, b = bar || * zap
(что тоже не работает), a, b = bar || Зап
выполняет то, что, как я предполагаю, было бы тем же.
Единственная ситуация, в которой это могло бы иметь какой-то смысл, это что-то вроде a, b = foo, bar || * Зап
. Вы должны обнаружить, что большинство случаев, когда вы хотели бы использовать это, покрыто a, b = foo, * (bar || zap)
. Если это не распространяется на ваш случай, вы, вероятно, должны спросить себя, чего вы действительно надеетесь достичь, написав такую уродливую конструкцию.
В ответ на ваши комментарии, * zap || bar
эквивалентен * (zap || bar)
. Это показывает, насколько низок приоритет сплата. Точно, как низко это? Лучший ответ, который я могу вам дать, это «довольно низкий».
Для интересного примера рассмотрим метод foo
, который принимает три аргумента:
def foo(a, b, c)
#important stuff happens here!
end
foo (* bar = [1, 2, 3])
появится после присваивания и установит аргументы в 1, 2 и 3 соответственно. Сравните это с foo ((* bar = [1, 2, 3]))
, который будет жаловаться на неправильное количество аргументов (1 для 3).