#python-3.x #plotly #plotly-dash #plotly-python
Вопрос:
У меня есть выходная переменная (REC2), которая обратно зависит от ряда фиксированных факторов, и входная переменная (REC1). Мой исходный код взял фиксированные коэффициенты и REC1 (жестко закодированный) и рассчитал REC2. Эта часть работает так, как мне бы хотелось.
Затем я сделал плагиат с веб-сайта Ploty Dash и придумал следующий код. График отображается правильно, но ползунок-нет. Я думаю, что это линия «отметок», но я не знаю, как ее настроить. Я бы хотел, чтобы он шел от 0 до -2000 с шагом 50.
import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
import plotly.graph_objects as go
Dep=363 #Water depth (m)
Speed = 2.2 #Ship's speed (m/s)
ASV=1.5 #Speed of sound in water (m/s)
SPI=6.25 #Distance between sample stations (m)
SB=0-((Dep*2)/ASV) #Sound travel time to seabed (milliseconds) - negative to denote below time zero
IET=(SPI/Speed) #Inter Event Time (s) time to travel SPI
Rmin=0
Rmax=-2000
external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']
app = dash.Dash(__name__, external_stylesheets=external_stylesheets)
app.layout = html.Div([
dcc.Graph(id='graph-with-slider'),
dcc.Slider(
id='3DHR Slider',
min=Rmax,
max=Rmin,
value=(Rmax-Rmin)/2,
marks={i: 'Label {}'.format(i) if i == 1 else str(i) for i in range(-20000,0)},
step=200
)
])
@app.callback(
Output('graph-with-slider', 'figure'),
Input('3DHR Slider', 'value'))
def update_figure(REC1):
REC2= ((0-IET)*1000)-REC1 #UHRS record length - Function of above
fig = go.Figure()
fig.add_trace(go.Scatter(
x=[0, 1,1, 0],
y=[0, 0, REC2, REC2],
fill='tonexty', # fill area between trace0 and trace1
mode='lines', line_color='indigo',name="UHRS"))
fig.add_trace(go.Scatter(
x=[0, 1,1, 0],
y=[0, 0, REC1, REC1],
fill='tonexty', # fill area between trace0 and trace1
mode='lines', line_color='blue',name="3DHR"))
fig.add_trace(go.Scatter(x=[0,1],y=[SB,SB],name="Seabed"))
return fig
if __name__ == '__main__':
app.run_server(debug=True)
Ответ №1:
Я обновился, чтобы работать в среде jupyter.
- вы создаете отметку для каждого значения в диапазоне от -2000 до 0. Затем они перекрываются, и вы получаете черную линию, которая является маркерами
- изменено понимание диктанта, чтобы создавать отметки каждые 200
- изменен шаг ползунка на 50, как вы заметили
import dash
from jupyter_dash import JupyterDash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
import plotly.graph_objects as go
Dep=363 #Water depth (m)
Speed = 2.2 #Ship's speed (m/s)
ASV=1.5 #Speed of sound in water (m/s)
SPI=6.25 #Distance between sample stations (m)
SB=0-((Dep*2)/ASV) #Sound travel time to seabed (milliseconds) - negative to denote below time zero
IET=(SPI/Speed) #Inter Event Time (s) time to travel SPI
Rmin=0
Rmax=-2000
external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']
app = JupyterDash(__name__, external_stylesheets=external_stylesheets)
app.layout = html.Div([
# dcc.Graph(id='graph-with-slider'),
dcc.Slider(
id='3DHR Slider',
min=Rmax,
max=Rmin,
value=(Rmax-Rmin)/2,
marks={i: f"DHR {i}" for i in range(-20000,0, 200)},
step=50
),
html.Div(id="sliderVal")
])
@app.callback(
Output("sliderVal", "children"),
Input('3DHR Slider', "value")
)
def useSlider(dhrSlider):
return dhrSlider
app.run_server(mode="inline")
Комментарии:
1. У меня не установлен Jupyter_Dash (возможно, мне следует), но я перенес соответствующую часть «метки» в свою, и теперь я получаю более или менее то, что хотел — я, безусловно, получаю отметки каждые 200 и шаги каждые 50. Каждая метка помечена DHR1, есть ли способ пометить их соответствующим номером, например -2000, -1800 и т.д.?
2.простой случай настройки строки f
f"DHR {I}"
. в вашем образце кода он был обозначен как метка n