在 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]
那个解决方案对我有用。
我正在创建一个带有多个滑块的仪表板以按时间过滤数据。我在动态、等间距的滑块上创建日期标记时遇到了一些问题。我的日期存储在字典中,格式如下:
{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]
那个解决方案对我有用。