在 Plotly Dash 中的字典中的滑块上设置标记

Setting Marks on Slider from Dictionary in Plotly Dash

我正在创建一个带有多个滑块的仪表板以按时间过滤数据。我在动态、等间距的滑块上创建日期标记时遇到了一些问题。我的日期存储在字典中,格式如下:

{0: '2020-01-03',
 1: '2020-01-04',
 2: '2020-01-05',
...
 n: 'DateN'}

这是我的代码的一个简单示例:

#Import packages
import pandas as pd
import numpy as np
import dash
import dash_core_components as dcc
import dash_html_components as html
import dash_bootstrap_components as dbc
from dash.dependencies import Input, Output
import time
from datetime import date, datetime

#Load data
who_data = pd.read_csv("https://covid19.who.int/WHO-COVID-19-global-data.csv")
who_data['Date_reported_string'] = who_data['Date_reported'].copy()

#Create slider dictionary
slider_options = dict((d_key, d_val) for d_key, d_val in enumerate(sorted(who_data['Date_reported_string'].unique())))

#Create array of equally spaced out dates
x = np.linspace(min(slider_options.keys()), max(slider_options.keys()), 10,dtype=int)
x = x.round(0)

#Dash App layout
app = dash.Dash(external_stylesheets=[dbc.themes.BOOTSTRAP])
app.layout = html.Div([
    dcc.Tabs([
        dcc.Tab(label="Slider Example",
                children=[
                    html.Div([
                        html.Label(dcc.Markdown('''**Choose a date: **''')),
                        dcc.Slider(id='slider',
                                   min = min(slider_options.keys()),
                                   max = max(slider_options.keys()),                                   
                                   value = max(slider_options.keys()),
                                   marks = {i: str(i) for i in range(x[0],x[-1]) if i %75 ==0}
                                  )
                    ],style={'width': '100%','display': 'inline-block','text-align': 'center'}),
                    html.Div([
                        html.Label('Date selected'),
                        html.P('',id='date_id')
                    ],style={'text-align':'center'})
                ])
    ])
])
                    
@app.callback(
    Output('date_id','children'),
    Input('slider','value'))

def date_show(date_value):
    return date_value


app.run_server(host='0.0.0.0',port='8050') 

这个应用程序现在的设置方式,10 个等距的日期被忽略,代码 if i%75==0 决定有多少日期出现在滑块中。如果我删除这个块,所有日期将出现在滑块上,彼此重叠,这不是我想要的。

此外,我想从字典中获取实际日期(值)而不是键。我试过用这样的字典值列出一个列表:

date_list=list(slider_options.values())

但是,当我在 marks 参数中用 date_list 代替 x 时,我得到一个类型错误:'str' object cannot be interpreted as一个整数。

谁能帮我解决这个问题?我被卡住了,不知道如何继续。如有任何帮助,我们将不胜感激!

谢谢!

对于任何阅读本文寻找答案的人,我在 Plotly 社区论坛上发布了同样的问题,并被告知替换

str(i) 

在标记参数中使用

slider_options[i]

那个解决方案对我有用。