pythondash交互式表格_PythonDash多个项目的下拉显示,带有交互式回调

pdh在这个令人惊叹的plotly社区中提出的解决方案是删除逗号,它将本应是熊猫系列的内容转换为元组。

Link to solution from Plotly communityimport pandas as pd

import numpy as np

import matplotlib.pyplot as plt

import dash

import dash_core_components as dcc

import dash_html_components as html

import plotly.graph_objs as go

from dash.dependencies import Input, Output

#create a dataframe with random data

df = pd.DataFrame(

{'wdg': [10,10,10,20,20,20,30,30,30,40],

'id': np.arange(0,100,10),

'b': np.random.rand(10)*100,

'c': np.random.rand(10)*100,

'd': np.random.rand(10)*100,

'e': np.random.rand(10)*100,

'f': np.random.rand(10)*100,

'g': np.random.rand(10)*100,

'h': np.random.rand(10)*100,

'k': np.random.rand(10)*100},

columns=['wdg','id','b','c','d','e','f','g','h','k'])

app = dash.Dash()

#html layout

app.layout = html.Div([

html.H1(

children='Perfomance database web app',

style={

'textAlign': 'center',

'color': colors['text']}

),

html.Div([

dcc.Dropdown(

id='dropdown1',

options=[{'label': i, 'value': i} for i in df.wdg.unique()],

value='10'

),

dcc.Dropdown(

id='dropdown2',

#options=[{'label': i, 'value': i} for i in mtrid_indicators],

#value='1'

),

],

style={'width': '49%', 'display': 'inline-block'}

),

html.Div(id='tablecontainer'),

html.Div(

dcc.Graph(

id='graph',

style={'width':'600','height':'500'}

),

style={'display':'inline-block'}

),

],

style={'width': '100%', 'display': 'inline-block'}

)

#callback to update dropdown 2

@app.callback(

Output(component_id='dropdown2',component_property='options'),

[Input(component_id='dropdown1',component_property='value')]

)

#function to that will update values in dropdown 2

def update_dropdown2(wdg):

wdgarray=df[ df['wdg'] == wdg ]['id'] # removed problematic comma

return [{'label':i,'value':i} for i in wdgarray]

#callback to update graph with values of dropdown 1 selecting pandas row

@app.callback(

Output('graph', 'figure'),

[Input('dropdown1', 'value')]

)

#graph plot and styling

def update_graph(row):

dff = df.iloc[int(row/10)].values # update with your own logic

return {

'data': [

go.Scatter(

x=np.arange(0,80,10),

y=dff,

mode='lines+markers',

line = dict(width = 5,color = 'rgb(200, 0, 0)'),

name='Torque curve',

marker = dict(

size = 10,

color = 'rgba(200, 0, 0, .9)',

line = dict(width = 2,color='rgb(0, 0, 0)')

)

),

],

'layout': go.Layout(

title='Torque Speed curve',

xaxis=dict(

# type='line',

title='Speed - (RPM)',

showgrid=True,

#zeroline=True,

showline=True,

gridcolor='#bdbdbd',

mirror="ticks",

ticks="inside",

tickwidth=1,

linewidth=2,

range=[0,100]

),

yaxis=dict(

title= 'Torque - (lb-ft)',

titlefont=dict( color='rgb(200, 0, 0)' ),

tickfont=dict( color='rgb(200, 0, 0)' ),

range=[0, 120],

showgrid=True,

#zeroline=True,

showline=True,

gridcolor='#bdbdbd',

mirror="ticks",

ticks="inside",

tickwidth=1,

linewidth=2

),

margin={'l': 60, 'b': 40, 't': 30, 'r': 60},

#legend={'x': 0.5, 'y': 1},

hovermode='closest',

showlegend=False,

)

}

if __name__ == '__main__':

app.run_server()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值