Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Plotly:如何根据链接下拉值自动更新DatePickerage中的开始日期和结束日期?_Python_Datepicker_Plotly_Plotly Dash_Plotly Python - Fatal编程技术网

Python Plotly:如何根据链接下拉值自动更新DatePickerage中的开始日期和结束日期?

Python Plotly:如何根据链接下拉值自动更新DatePickerage中的开始日期和结束日期?,python,datepicker,plotly,plotly-dash,plotly-python,Python,Datepicker,Plotly,Plotly Dash,Plotly Python,我想在回调中自动更新DatePickerage的开始日期和结束日期,其中输入是先前下拉列表的值。我有两个链式下拉列表,我正在更新第二个相关下拉列表的选项。我尝试对datepickerRange执行相同的操作,但似乎找不到一种方法可以在此处从def返回开始日期和结束日期: @app.callback( Output(component_id='date_choice', component_property='start_date'), Output(component_id='d

我想在回调中自动更新DatePickerage的开始日期和结束日期,其中输入是先前下拉列表的值。我有两个链式下拉列表,我正在更新第二个相关下拉列表的选项。我尝试对datepickerRange执行相同的操作,但似乎找不到一种方法可以在此处从def返回开始日期和结束日期:

@app.callback(
    Output(component_id='date_choice', component_property='start_date'),
    Output(component_id='date_choice', component_property='end_date'),
    Input(component_id='release_choice', component_property='value'))
def get_options(date_choice):
    dff = df[df.date2 == date_choice]
    return [{'label': i, 'value': i} for i in dff['date2']]
以下是完整的代码:

import dash
import datetime as datetime
import plotly.express as px
import pandas as pd
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Output, Input
df = pd.DataFrame({'Unnamed: 0': {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, 10: 10, 11: 11, 12: 12, 13: 13},
               'Technology': {0: '4G', 1: '4G', 2: 'SM', 3: '5G', 4: 'SM', 5: '4G', 6: 'SM', 7: '5G', 8: '2G', 9: 'SM', 10: '5G', 11: 'SM', 12: 'SM', 13: '4G'},
               'SystemRelease': {0: 'lte22', 1: 'lte22', 2: 'umts22', 3: '5G22', 4: 'umts22A', 5: 'lte18A', 6: 'umts6A', 7: '5G22A', 8: '2G18', 9: 'L22B', 10: '5G22A', 11: 'umts22B', 12: 'L22A', 13: 'lte18A'},
               'Date': {0: '27.09.2022', 1: '26.09.2022', 2: '25.09.2022', 3: '25.09.2022', 4: '24.09.2022', 5: '23.09.2022', 6: '23.09.2022', 7: '23.09.2022', 8: '20.09.2022', 9: '22.09.2022', 10: '22.09.2022', 11: '22.09.2022', 12: '22.09.2022', 13: '22.09.2022'},
               'TypeofRelease': {0: 'Normal Update', 1: 'Standard Update', 2: 'Standard Update', 3: 'Maintenance Delivery', 4: 'Delivery', 5: 'Standard Update', 6: 'Normal Update', 7: 'Delivery', 8: 'Standard Update', 9: 'Delivery', 10: 'Delivery', 11: 'Delivery', 12: 'Delivery', 13: 'Standard Update'},
               'Package': {0: '2.5', 1: '0.3', 2: '0.3', 3: '1.1.2', 4: '1.0', 5: '3.0.7', 6: '01.03.2007', 7: '0.2', 8: '2.3', 9: '1.0', 10: '0.5', 11: '1.0', 12: '1.0.6', 13: '6.0'}})


df['date2'] = [datetime.datetime.strptime(x, '%d.%m.%Y') for x in df['Date'] ]
df.sort_values(by=['date2'], inplace=True)

app = dash.Dash(__name__)
app.title = "Roadmap"

app.layout = html.Div(

children=[

    html.Div(
        children=[
            html.Div(
                children=[
                    html.Div(children='Select Technology:', className="menu-title"),
                    dcc.Dropdown(
                        id='Tech_choice',
                        options=[{'label': x, 'value': x}
                                 for x in df.Technology.unique()],
                        value='4G',
                        clearable=False,
                        className="dropdown",

                    ), ]),
            html.Div(
                children=[
                    html.Div(children="Select Release:", className="menu-title"),
                    dcc.Dropdown(
                        id='release_choice',
                        options=[],
                        clearable=False,
                        className="dropdown",
                    )
                ]
            ),
            html.Div(
                children=[
                    html.Div(children="Select Date:", className="menu-title"),
                    dcc.DatePickerRange(
                        id="date_choice",
                        min_date_allowed=df.date2.min().date(),
                        max_date_allowed=df.date2.max().date(),
                        start_date=df.date2.min().date(),
                        end_date=df.date2.max().date(),
                    )
                ]
            ),
        ],
        className="menu",
    ),
    html.Div(
        children=[
            html.Div(
                children=dcc.Graph(
                    id='my-graph', config={"displayModeBar": False},
                    # style={'overflowY': 'scroll', 'width': 1000}
                ),
                className="card",
            ),
        ],
        className="wrapper",
    ), ])

@app.callback(
    Output(component_id='release_choice', component_property='options'),
    Input(component_id='Tech_choice', component_property='value'))
def get_options(Tech_choice):
    dff = df[df.Technology == Tech_choice]
    return [{'label': i, 'value': i} for i in dff['SystemRelease'].unique()]

@app.callback(
    Output(component_id='release_choice', component_property='value'),
    Input(component_id='release_choice', component_property='options'))
def get_values(release_choice):
    return [k['value'] for k in release_choice][1]

@app.callback(
    Output(component_id='date_choice', component_property='start_date'),
    Output(component_id='date_choice', component_property='end_date'),
    Input(component_id='release_choice', component_property='value'))
def get_options(date_choice):
    dff = df[df.date2 == date_choice]  # doubt
    return [{'label': i, 'value': i} for i in dff['date2']]


@app.callback(Output(component_id='my-graph', component_property='figure'),
              [Input(component_id='release_choice', component_property='value')],
              [Input(component_id='Tech_choice', component_property='value')],
              [Input(component_id='date_choice', component_property='start_date')],
              [Input(component_id='date_choice', component_property='end_date')], )
def int_gr(release_choice, Tech_choice, start_date, end_date):
    print(Tech_choice)
    print(release_choice)
    dff = df[(df['SystemRelease'] == release_choice) & (df['Technology'] == Tech_choice) & (df['date2'] >= start_date) & (df['date2'] <= end_date)]
    fig = px.scatter(data_frame=dff, x='date2', y='SystemRelease', color="TypeofRelease", text='Package',
                     labels={
                         "SystemRelease": "System Release",
                         "date2": "Date",
                         "TypeofRelease": "Type of Release:"
                     })
    fig.update_traces(marker=dict(size=12,
                                  line=dict(width=2,
                                            color='DarkSlateGrey')),

                  selector=dict(mode='markers'))
# fig.update_traces(boxpoints='all', jitter=0.8)
fig.update_traces(textposition='top center', mode='markers+text')

fig.update_layout(
    autosize=False,
    width=1200,
    height=400)

return fig

if __name__ == '__main__':
    app.run_server()
导入破折号
将datetime导入为datetime
将plotly.express导入为px
作为pd进口熊猫
将仪表板核心组件作为dcc导入
将dash_html_组件导入为html
从dash.dependencies导入输出,输入
数据帧({'Unnamed:0':{0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,10:10,11:11,12:12,13:13},
“技术”:{0:'4G',1:'4G',2:'SM',3:'5G',4:'SM',5:'4G',6:'SM',7:'5G',8:'2G',9:'SM',10:'5G',11:'SM',12:'SM',13:'4G},
'SystemRelease':{0:'lte22',1:'lte22',2:'umts22',3:'5G22',4:'umts22A',5:'lte18A',6:'umts6A',7:'5G22A',8:'2G18',9:'L22B',10:'5G22A',11:'umts22B',12:'L22A',13:'lte18A'},
‘日期’:{0:'27.09.2022',1:'26.09.2022',2:'25.09.2022',3:'25.09.2022',4:'24.09.2022',5:'23.09.2022',6:'23.09.2022',7:'23.09.2022',8:'20.09.2022',9:'22.09.2022',10:'22.09.2022',11:'22.09.2022',12:'22.09.2022'},
'TypeOfree':{0:'正常更新',1:'标准更新',2:'标准更新',3:'维护交付',4:'交付',5:'标准更新',6:'正常更新',7:'交付',8:'标准更新',9:'交付',10:'交付',11:'交付',12:'交付',13:'标准更新'},
‘Package’:{0:'2.5',1:'0.3',2:'0.3',3:'1.1.2',4:'1.0',5:'3.0.7',6:'01.03.2007',7:'0.2',8:'2.3',9:'1.0',10:'0.5',11:'1.0',12:'1.0.6',13:'6.0'})
df['date2']=[datetime.datetime.strtime(x,'%d.%m.%Y'),用于df['Date']]中的x
df.sort_值(by=['date2'],inplace=True)
app=dash.dash(_名称__)
app.title=“路线图”
app.layout=html.Div(
孩子们=[
html.Div(
孩子们=[
html.Div(
孩子们=[
html.Div(children='Select Technology:',className=“菜单标题”),
dcc.下拉列表(
id='Tech\u choice',
选项=[{'label':x,'value':x}
对于df.Technology.unique()中的x,
value='4G',
clearable=False,
className=“下拉列表”,
), ]),
html.Div(
孩子们=[
html.Div(children=“Select Release:”,className=“menu title”),
dcc.下拉列表(
id='release\u choice',
选项=[],
clearable=False,
className=“下拉列表”,
)
]
),
html.Div(
孩子们=[
html.Div(children=“Select Date:”,className=“menu title”),
日期选择器(
id=“日期选择”,
允许的最小日期=df.date2.min().date(),
允许的最大日期=df.date2.max().date(),
开始日期=df.date2.min().date(),
end_date=df.date2.max().date(),
)
]
),
],
className=“菜单”,
),
html.Div(
孩子们=[
html.Div(
children=dcc.Graph(
id='my-graph',config={“displayModeBar”:False},
#样式={'overflowY':'scroll','width':1000}
),
className=“卡片”,
),
],
className=“包装器”,
), ])
@app.callback(
输出(组件\u id='release\u choice',组件\u property='options'),
输入(组件id='Tech'u choice',组件属性='value'))
def get_选项(技术选项):
dff=df[df.Technology==Tech\u choice]
为dff['SystemRelease']中的i返回[{'label':i',value':i}。unique()]
@app.callback(
输出(组件\u id='release\u choice',组件\u属性='value'),
输入(组件\u id='release\u choice',组件\u属性='options'))
def get_值(发布_选项):
返回[k['value'],用于发布选项中的k][1]
@app.callback(
输出(组件\u id='date\u choice',组件\u property='start\u date'),
输出(组件\u id='date\u choice',组件\u property='end\u date'),
输入(组件\u id='release\u choice',组件\u属性='value'))
def get_选项(日期选择):
dff=df[df.date2==date\u选择]#怀疑
在dff['date2']]中为i返回[{'label':i,'value':i}]
@app.callback(输出(component_id='my-graph',component_property='figure'),
[输入(组件\u id='release\u choice',组件\u属性='value')],
[输入(组件id='Tech\u choice',组件属性='value'),
[输入(组件\u id='date\u choice',组件\u属性='start\u date')],
[输入(组件id='date'choice',组件属性='end'date'),]
def int gr(发布选项、技术选项、开始日期、结束日期):
打印(技术选择)
打印(发布选项)

dff=df[(df['SystemRelease']==release\u choice)&(df['Technology']==Tech\u choice)&(df['date2']>=start\u date)&(df['date2']这里发生了很多事情,我不能保证生成的应用程序会完全符合您的目标。但您似乎在这里犯的唯一错误是:

输入参数
Tech\u choice.value
必须是
dash.dependencies.Input
s

这说明您的回调必须设置为:

@app.callback(
    Output(component_id='release_choice', component_property='options'),
    [Input(component_id='Tech_choice', component_property='value')])
而不是:

@app.callback(
    Output(component_id='release_choice', component_property='options'),
    Input(component_id='Tech_choice', component_property='value'))
其中前者具有<代码
@app.callback(Output(component_id='my-graph', component_property='figure'),
              [Input(component_id='release_choice', component_property='value')],
              [Input(component_id='Tech_choice', component_property='value')],
              [Input(component_id='date_choice', component_property='start_date')],
              [Input(component_id='date_choice', component_property='end_date')], )
    fig.update_traces(marker=dict(size=12,
                                  line=dict(width=2,
                                            color='DarkSlateGrey')),

                  selector=dict(mode='markers'))
# fig.update_traces(boxpoints='all', jitter=0.8)
fig.update_traces(textposition='top center', mode='markers+text')

fig.update_layout(
    autosize=False,
    width=1200,
    height=400)

return fig
import dash
import datetime as datetime
import plotly.express as px
import pandas as pd
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Output, Input
df = pd.DataFrame({'Unnamed: 0': {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, 10: 10, 11: 11, 12: 12, 13: 13},
               'Technology': {0: '4G', 1: '4G', 2: 'SM', 3: '5G', 4: 'SM', 5: '4G', 6: 'SM', 7: '5G', 8: '2G', 9: 'SM', 10: '5G', 11: 'SM', 12: 'SM', 13: '4G'},
               'SystemRelease': {0: 'lte22', 1: 'lte22', 2: 'umts22', 3: '5G22', 4: 'umts22A', 5: 'lte18A', 6: 'umts6A', 7: '5G22A', 8: '2G18', 9: 'L22B', 10: '5G22A', 11: 'umts22B', 12: 'L22A', 13: 'lte18A'},
               'Date': {0: '27.09.2022', 1: '26.09.2022', 2: '25.09.2022', 3: '25.09.2022', 4: '24.09.2022', 5: '23.09.2022', 6: '23.09.2022', 7: '23.09.2022', 8: '20.09.2022', 9: '22.09.2022', 10: '22.09.2022', 11: '22.09.2022', 12: '22.09.2022', 13: '22.09.2022'},
               'TypeofRelease': {0: 'Normal Update', 1: 'Standard Update', 2: 'Standard Update', 3: 'Maintenance Delivery', 4: 'Delivery', 5: 'Standard Update', 6: 'Normal Update', 7: 'Delivery', 8: 'Standard Update', 9: 'Delivery', 10: 'Delivery', 11: 'Delivery', 12: 'Delivery', 13: 'Standard Update'},
               'Package': {0: '2.5', 1: '0.3', 2: '0.3', 3: '1.1.2', 4: '1.0', 5: '3.0.7', 6: '01.03.2007', 7: '0.2', 8: '2.3', 9: '1.0', 10: '0.5', 11: '1.0', 12: '1.0.6', 13: '6.0'}})


df['date2'] = [datetime.datetime.strptime(x, '%d.%m.%Y') for x in df['Date'] ]
df.sort_values(by=['date2'], inplace=True)

app = dash.Dash(__name__)
app.title = "Roadmap"

app.layout = html.Div(

children=[

    html.Div(
        children=[
            html.Div(
                children=[
                    html.Div(children='Select Technology:', className="menu-title"),
                    dcc.Dropdown(
                        id='Tech_choice',
                        options=[{'label': x, 'value': x}
                                 for x in df.Technology.unique()],
                        value='4G',
                        clearable=False,
                        className="dropdown",

                    ), ]),
            html.Div(
                children=[
                    html.Div(children="Select Release:", className="menu-title"),
                    dcc.Dropdown(
                        id='release_choice',
                        options=[],
                        clearable=False,
                        className="dropdown",
                    )
                ]
            ),
            html.Div(
                children=[
                    html.Div(children="Select Date:", className="menu-title"),
                    dcc.DatePickerRange(
                        id="date_choice",
                        min_date_allowed=df.date2.min().date(),
                        max_date_allowed=df.date2.max().date(),
                        start_date=df.date2.min().date(),
                        end_date=df.date2.max().date(),
                    )
                ]
            ),
        ],
        className="menu",
    ),
    html.Div(
        children=[
            html.Div(
                children=dcc.Graph(
                    id='my-graph', config={"displayModeBar": False},
                    # style={'overflowY': 'scroll', 'width': 1000}
                ),
                className="card",
            ),
        ],
        className="wrapper",
    ), ])

@app.callback(
    Output(component_id='release_choice', component_property='options'),
    [Input(component_id='Tech_choice', component_property='value')])
def get_options(Tech_choice):
    dff = df[df.Technology == Tech_choice]
    return [{'label': i, 'value': i} for i in dff['SystemRelease'].unique()]

@app.callback(
    Output(component_id='release_choice', component_property='value'),
    [Input(component_id='release_choice', component_property='options')])
def get_values(release_choice):
    return [k['value'] for k in release_choice][1]

@app.callback(
    [Output(component_id='date_choice', component_property='start_date'),
    Output(component_id='date_choice', component_property='end_date')],
    [Input(component_id='release_choice', component_property='value')])
def get_options(date_choice):
    dff = df[df.date2 == date_choice]  # doubt
    return [{'label': i, 'value': i} for i in dff['date2']]


@app.callback(Output(component_id='my-graph', component_property='figure'),
              [Input(component_id='release_choice', component_property='value'),
              Input(component_id='Tech_choice', component_property='value'),
              Input(component_id='date_choice', component_property='start_date'),
              Input(component_id='date_choice', component_property='end_date')], )
def int_gr(release_choice, Tech_choice, start_date, end_date):
    print(Tech_choice)
    print(release_choice)
    dff = df[(df['SystemRelease'] == release_choice) & (df['Technology'] == Tech_choice) & (df['date2'] >= start_date) & (df['date2'] <= end_date)]
    fig = px.scatter(data_frame=dff, x='date2', y='SystemRelease', color="TypeofRelease", text='Package',
                     labels={
                         "SystemRelease": "System Release",
                         "date2": "Date",
                         "TypeofRelease": "Type of Release:"
                     })
    fig.update_traces(marker=dict(size=12,
                                  line=dict(width=2,
                                            color='DarkSlateGrey')),

                  selector=dict(mode='markers'))
    # fig.update_traces(boxpoints='all', jitter=0.8)
    fig.update_traces(textposition='top center', mode='markers+text')

    fig.update_layout(
        autosize=False,
        width=1200,
        height=400)

    return fig

if __name__ == '__main__':
    app.run_server()