如何解决在 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())
但是,当我在 date_list
参数中使用 x
代替 marks
时,我收到一个类型错误,内容为:'str' 对象不能被解释为整数。
有人可以帮我解决这个问题吗?我被卡住了,不知道如何继续。任何帮助将不胜感激!
谢谢!
解决方法
对于阅读本文寻找答案的人,我在 Plotly 社区论坛上发布了相同的问题,并被告知要替换
str(i)
在标记参数中
slider_options[i]
那个解决方案对我有用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。