Python详细介绍了如何使用动态检查表获取自定义按钮

Python详细介绍了如何使用动态检查表获取自定义按钮,python,python-3.x,plotly,plotly-dash,checklistbox,Python,Python 3.x,Plotly,Plotly Dash,Checklistbox,一般来说,我对Python/Plotly/Dash还不熟悉,但我在这里尝试创建一个带有两个自定义按钮的图表,一个显示我所在州的每日新冠病毒疫苗剂量,另一个显示累积疫苗剂量。每个按钮有两个数据行,我希望这些行是动态的,基于用户点击的复选框 希望这段视频能帮助我澄清问题,因为我很难清楚地解释我的问题:基本上,当我单击“每日”按钮时,它会显示数据行,根据选中的复选框和累积的复选框显示数据行。如何将下面UpdateNu Daily按钮代码中的y轴dict args代码替换为动态y轴 将熊猫作为pd导入

一般来说,我对Python/Plotly/Dash还不熟悉,但我在这里尝试创建一个带有两个自定义按钮的图表,一个显示我所在州的每日新冠病毒疫苗剂量,另一个显示累积疫苗剂量。每个按钮有两个数据行,我希望这些行是动态的,基于用户点击的复选框

希望这段视频能帮助我澄清问题,因为我很难清楚地解释我的问题:基本上,当我单击“每日”按钮时,它会显示数据行,根据选中的复选框和累积的复选框显示数据行。如何将下面UpdateNu Daily按钮代码中的y轴dict args代码替换为动态y轴

将熊猫作为pd导入
绘声绘色地导入
将plotly.express导入为px
导入plotly.graph_对象作为go
导入破折号
将仪表板核心组件作为dcc导入
将dash_引导程序_组件作为dbc导入
将dash_html_组件导入为html
从dash.dependencies导入输入,输出
app=dash.dash(名称,外部样式表=[dbc.themes.BOOTSTRAP])
#---------------------------------------------------------------
df3=pd.DataFrame({'report\u date':{0: '12/24/2020', 1: '12/30/2020', 2: '12/31/2020', 3: '1/1/2021', 4: '1/2/2021', 5: '1/3/2021', 6: '1/4/2021', 7: '1/5/2021', 8: '1/6/2021', 9: '1/7/2021', 10: '1/8/2021', 11: '1/9/2021', 12: '1/10/2021', 13: '1/11/2021', 14: '1/12/2021', 15: '1/13/2021', 16: '1/14/2021', 17: '1/15/2021', 18: '1/16/2021', 19: '1/17/2021', 20: '1/18/2021', 21: '1/19/2021', 22: '1/20/2021', 23: '1/21/2021', 24: '1/22/2021', 25: '1/23/2021', 26: '1/24/2021', 27: '1/25/2021', 28: '1/26/2021', 29: '1/27/2021', 30: '1/28/2021', 31: '1/29/2021', 32: '1/30/2021', 33: '1/31/2021', 34: '2/1/2021', 35: '2/2/2021', 36: '2/3/2021', 37: '2/4/2021', 38: '2/5/2021', 39: '2/6/2021', 40: '2/7/2021', 41: '2/8/2021', 42: '2/9/2021',43:'2/10/2021',44:'2/11/2021',45:'2/12/2021',46:'2/13/2021',47:'2/14/2021',48:'2/15/2021',49:'2/16/2021'},'前一天服用的剂量':{0: 0, 1: 4595, 2: 5463, 3: 5415, 4: 4305, 5: 4361, 6: 4808, 7: 7607, 8: 10350, 9: 12251, 10: 14932, 11: 15700, 12: 9983, 13: 8859, 14: 11448, 15: 11231, 16: 14237, 17: 15609, 18: 14460, 19: 11007, 20: 9691, 21: 14346, 22: 13784, 23: 15899, 24: 11168, 25: 11161, 26: 4427, 27: 5537, 28: 9707, 29: 9513, 30: 11910, 31: 10215, 32: 9373, 33: 2816, 34: 2256,35:2715,36:3716,37:6724,38:7694,39:9917,40:6518,41:6987,42:12462,43:13486,44:14717,45:15605,46:14506,47:10679,48:7698,49:5053},“给药总剂量”:{0: 10756, 1: 18603, 2: 23502, 3: 28887, 4: 33191, 5: 37551, 6: 42419, 7: 50030, 8: 60380, 9: 72631, 10: 87563, 11: 103263, 12: 113246, 13: 122105, 14: 133553, 15: 144784, 16: 159021, 17: 174630, 18: 189090, 19: 200097, 20: 209788, 21: 224134, 22: 237918, 23: 253817, 24: 264985, 25: 276146, 26: 280573, 27: 286110, 28: 295817, 29: 305330, 30: 317240,31:327455,32:336828,33:339644,34:341900,35:344615,36:348331,37:355055,38:362749,39:372666,40:379184,41:386171,42:398633,43:412119,44:426836,45:442441,46:456947,47:467626,48:475324,49:480377},“完全接种的个体的总剂量”:{0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 860, 9: 2173, 10: 4053, 11: 5880, 12: 5884, 13: 5884, 14: 6046, 15: 8778, 16: 13293, 17: 17094, 18: 19333, 19: 21714, 20: 21752, 21: 25609, 22: 32361, 23: 40225, 24: 49292, 25: 57907, 26: 62881, 27: 71256, 28: 83285, 29: 96459, 30: 110571, 31: 123357, 32: 135574, 33: 137698, 34: 140585, 35: 144113,36:149987,37:161954,38:175662,39:193146,40:203487,41:212326,42:231058,43:251449,44:273975,45:302563,46:328614,47:349286,48:364274,49:373867},“完全接种的个人总数”:{0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 430, 9: 1087, 10: 2027, 11: 2940, 12: 2942, 13: 2942, 14: 3023, 15: 4389, 16: 6647, 17: 8547, 18: 9667, 19: 10857, 20: 10876, 21: 12805, 22: 16181, 23: 20113, 24: 24646, 25: 28954, 26: 31441, 27: 35628, 28: 41643, 29: 48230, 30: 55286, 31: 61679, 32: 67787, 33: 68849, 34: 70293, 35: 72057, 36: 74994, 37: 80977, 38: 87831, 39: 96573, 40: 101744, 41: 106163, 42: 115529, 43: 125725, 44: 136988, 45: 151282, 46: 164307, 47: 174643, 48: 182137, 49: 186934}})
df3[“报告日期”]=pd.至日期时间(df3[“报告日期”])
df3[“前一天完全接种的剂量”]=df3[“完全接种的个体的总剂量”]。差异()
df3[“完全接种疫苗的个体的总剂量].diff()
#---------------------------------------------------------------
app.layout=html.Div([
html.Div([
dbc.行([
Col(html.Div([
图(
id='DoubleDoughts\u graph',
配置={
“displayModeBar”:False,
“滚动缩放”:False
}
)
]),)
],style={'align-items':'center'}),
dbc.行([
dbc.Col(
html.Div([
dcc.检查表(
id='myyyy\u清单',
选择权=[
{'label':'给药剂量','value':'前一天给药剂量',
{'label':'完全接种的个人剂量','value':'前一天完全接种的剂量',
],
值=[“前一天的给药量”、“前一天的完全给药量”],
标签样式={
“显示”:“内联块”,
“右边填充”:“30px”,
“左填充”:“30px”
},
输入样式={
“右边距”:“20px”,
“垂直对齐”:“中间对齐”,
“宽度”:“20px”;“高度”:“20px”;#复选框大小
“垂直对齐”:“底部”
},
风格={
“文本对齐”:“居中”
import pandas as pd
import plotly         
import plotly.express as px
import plotly.graph_objects as go
import dash            
import dash_core_components as dcc
import dash_bootstrap_components as dbc
import dash_html_components as html
from dash.dependencies import Input, Output

app = dash.Dash(__name__, external_stylesheets=[dbc.themes.BOOTSTRAP])

#---------------------------------------------------------------
df3 = pd.DataFrame({'report_date': {0: '12/24/2020', 1: '12/30/2020', 2: '12/31/2020', 3: '1/1/2021', 4: '1/2/2021', 5: '1/3/2021', 6: '1/4/2021', 7: '1/5/2021', 8: '1/6/2021', 9: '1/7/2021', 10: '1/8/2021', 11: '1/9/2021', 12: '1/10/2021', 13: '1/11/2021', 14: '1/12/2021', 15: '1/13/2021', 16: '1/14/2021', 17: '1/15/2021', 18: '1/16/2021', 19: '1/17/2021', 20: '1/18/2021', 21: '1/19/2021', 22: '1/20/2021', 23: '1/21/2021', 24: '1/22/2021', 25: '1/23/2021', 26: '1/24/2021', 27: '1/25/2021', 28: '1/26/2021', 29: '1/27/2021', 30: '1/28/2021', 31: '1/29/2021', 32: '1/30/2021', 33: '1/31/2021', 34: '2/1/2021', 35: '2/2/2021', 36: '2/3/2021', 37: '2/4/2021', 38: '2/5/2021', 39: '2/6/2021', 40: '2/7/2021', 41: '2/8/2021', 42: '2/9/2021', 43: '2/10/2021', 44: '2/11/2021', 45: '2/12/2021', 46: '2/13/2021', 47: '2/14/2021', 48: '2/15/2021', 49: '2/16/2021'}, 'previous_day_doses_administered': {0: 0, 1: 4595, 2: 5463, 3: 5415, 4: 4305, 5: 4361, 6: 4808, 7: 7607, 8: 10350, 9: 12251, 10: 14932, 11: 15700, 12: 9983, 13: 8859, 14: 11448, 15: 11231, 16: 14237, 17: 15609, 18: 14460, 19: 11007, 20: 9691, 21: 14346, 22: 13784, 23: 15899, 24: 11168, 25: 11161, 26: 4427, 27: 5537, 28: 9707, 29: 9513, 30: 11910, 31: 10215, 32: 9373, 33: 2816, 34: 2256, 35: 2715, 36: 3716, 37: 6724, 38: 7694, 39: 9917, 40: 6518, 41: 6987, 42: 12462, 43: 13486, 44: 14717, 45: 15605, 46: 14506, 47: 10679, 48: 7698, 49: 5053}, 'total_doses_administered': {0: 10756, 1: 18603, 2: 23502, 3: 28887, 4: 33191, 5: 37551, 6: 42419, 7: 50030, 8: 60380, 9: 72631, 10: 87563, 11: 103263, 12: 113246, 13: 122105, 14: 133553, 15: 144784, 16: 159021, 17: 174630, 18: 189090, 19: 200097, 20: 209788, 21: 224134, 22: 237918, 23: 253817, 24: 264985, 25: 276146, 26: 280573, 27: 286110, 28: 295817, 29: 305330, 30: 317240, 31: 327455, 32: 336828, 33: 339644, 34: 341900, 35: 344615, 36: 348331, 37: 355055, 38: 362749, 39: 372666, 40: 379184, 41: 386171, 42: 398633, 43: 412119, 44: 426836, 45: 442441, 46: 456947, 47: 467626, 48: 475324, 49: 480377}, 'total_doses_in_fully_vaccinated_individuals': {0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 860, 9: 2173, 10: 4053, 11: 5880, 12: 5884, 13: 5884, 14: 6046, 15: 8778, 16: 13293, 17: 17094, 18: 19333, 19: 21714, 20: 21752, 21: 25609, 22: 32361, 23: 40225, 24: 49292, 25: 57907, 26: 62881, 27: 71256, 28: 83285, 29: 96459, 30: 110571, 31: 123357, 32: 135574, 33: 137698, 34: 140585, 35: 144113, 36: 149987, 37: 161954, 38: 175662, 39: 193146, 40: 203487, 41: 212326, 42: 231058, 43: 251449, 44: 273975, 45: 302563, 46: 328614, 47: 349286, 48: 364274, 49: 373867}, 'total_individuals_fully_vaccinated': {0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 430, 9: 1087, 10: 2027, 11: 2940, 12: 2942, 13: 2942, 14: 3023, 15: 4389, 16: 6647, 17: 8547, 18: 9667, 19: 10857, 20: 10876, 21: 12805, 22: 16181, 23: 20113, 24: 24646, 25: 28954, 26: 31441, 27: 35628, 28: 41643, 29: 48230, 30: 55286, 31: 61679, 32: 67787, 33: 68849, 34: 70293, 35: 72057, 36: 74994, 37: 80977, 38: 87831, 39: 96573, 40: 101744, 41: 106163, 42: 115529, 43: 125725, 44: 136988, 45: 151282, 46: 164307, 47: 174643, 48: 182137, 49: 186934}})
df3['report_date'] = pd.to_datetime(df3['report_date'])
df3['previous_day_fully_vaxxed_doses'] = df3['total_doses_in_fully_vaccinated_individuals'].diff()
df3['total_doses_in_fully_vaccinated_individuals'].diff()
#---------------------------------------------------------------
app.layout = html.Div([
    html.Div([      
        dbc.Row([
            dbc.Col(html.Div([
                dcc.Graph(
                    id='doubledoses_graph',
                    config = {
                    'displayModeBar': False,
                    'scrollZoom': False
                    }
                )
            ]),)
        ],style={'align-items':'center'}),

dbc.Row([
    dbc.Col(
        html.Div([
            dcc.Checklist(
                id='myyyy_checklist',
                options=[
                         {'label': 'Doses Administered', 'value': 'previous_day_doses_administered'},
                         {'label': 'Doses in Fully Vaccinated Individuals', 'value': 'previous_day_fully_vaxxed_doses'},
                ],
                value=['previous_day_doses_administered','previous_day_fully_vaxxed_doses'],
                labelStyle={
                    'display': 'inline-block',
                    'padding-right':'30px',
                    'padding-left':'30px'
                },
                inputStyle={
                    "margin-right": "20px",
                    'vertical-align':'middle',
                    'width':'20px','height':'20px', #size of checkboxes
                    'vertical-align': 'bottom'
                },
                style={
                    'text-align':'center'
                }
            ), 
        ]),
    ),
]),
],className='container pb-5'),
])

#---------------------------------------------------------------
@app.callback(
    Output(component_id='doubledoses_graph', component_property='figure'),
    [Input(component_id='myyyy_checklist', component_property='value')]
)

def build_doubledosesGraph(y_axis):
    fig = px.line(df3,
        x = 'report_date',
        y = y_axis,
        height = 300,
        labels = {
            "report_date":"<b>Date</b>",
            "value":"<b>Number of Doses</b>",
            "variable":"<b>Variable</b>"
        }
    )

    fig.layout.xaxis.fixedrange = True
    fig.layout.yaxis.fixedrange = True

fig.add_trace(
    go.Scatter(
        x=df3['report_date'],
        y=df3['total_doses_administered'],
        visible=False
    )
)

fig.add_trace(
    go.Scatter(
        x=df3['report_date'],
        y=df3['total_doses_in_fully_vaccinated_individuals'],
        visible=False
    )
)

fig.update_layout(
    showlegend=False, 
    hovermode="x unified",
    template="none",
    hoverlabel=dict(
    bgcolor="white",
    font_size=12,
    font_family="Rockwell"
    ),

    updatemenus=[dict(
        type="buttons",
        x=1,
        y=1.3,
        direction='right',
        showactive=True,
        buttons=list(
            [
                dict(
                    label="Daily",
                    method="update",
                    args=[{
                        'visible':[True,True,False,False]
                    }],
                ),
                dict(
                    label="Cumulative",
                    method="update",
                    args=[{
                        'visible':[False,False,True,True]
                    }],
                ),
            ]
        ),
    )]
)

return fig

#---------------------------------------------------------------

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