python - 在 Dash plotly 中清除下拉列表时无法显示图形
问题描述
total_bill
我构建了一个破折号应用程序来显示数据集中vstip
的散点图tips
。我有一个下拉菜单,允许选择多个日期,这样我就可以通过选择的那些来为散点图着色days
。
我需要的是当从下拉列表中没有选择任何内容时,散点图全天着色。当通过下拉列表选择一天或多天时,散点图仅按所选日期着色。
我的应用程序代码如下。问题是当我清除下拉列表时,图表也变为空。它应该显示一个由所有日子着色的散点图。
有谁知道为什么会这样?我该如何解决这个问题。我花了几个小时在这上面,但找不到解决方案。
提前非常感谢。
import dash
from dash.dependencies import Input, Output
import dash_html_components as html
import dash_core_components as dcc
import seaborn as sns
import plotly_express as px
external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']
app = dash.Dash(__name__, external_stylesheets=external_stylesheets)
# load dataset
tips = sns.load_dataset("tips")
days = ['Thur', 'Fri', 'Sat', 'Sun']
#layout
app.layout = html.Div([
html.P('select days'),
dcc.Dropdown(
id='days',
options= [{'label': k, 'value':k} for k in days],
value = None,
multi=True),
dcc.Graph(id="graph")
])
#funtion to plot tips scatter plot
def plot_tips(data=tips, days=None):
if days is not None:
data=data[data.day.isin(days)]
fig = px.scatter(data, x='total_bill', y='tip', color='day')
return (fig)
#callback
@app.callback(
Output('graph', "figure"),
[Input('days', 'value') ] )
def make_figure(days):
fig = plot_tips(data = tips, days= days)
return (fig)
if __name__ == '__main__':
app.run_server(debug=True)
解决方案
这可能是这样的(Dash v1.6.0):
import dash
import dash_html_components as html
import dash_core_components as dcc
import seaborn as sns
import plotly.express as px
external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']
app = dash.Dash(__name__, external_stylesheets=external_stylesheets)
tips = sns.load_dataset("tips")
all_days = ['Thur', 'Fri', 'Sat', 'Sun']
app.layout = html.Div([
html.P('select days'),
dcc.Dropdown(
id='days',
options= [{'label': k, 'value':k} for k in all_days],
value = None,
multi=True),
dcc.Graph(id="graph")
])
def plot_tips(data=tips, days=None):
if days is not None:
data=data[data.day.isin(days)]
fig = px.scatter(data, x='total_bill', y='tip', color='day')
else:
data=data[data.day.isin(all_days)]
fig = px.scatter(data, x='total_bill', y='tip', color='day')
return (fig)
@app.callback(
dash.dependencies.Output('graph', "figure"),
[dash.dependencies.Input('days', 'value') ] )
def make_figure(days):
fig = plot_tips(data = tips, days= days)
return (fig)
if __name__ == '__main__':
app.run_server(debug=True)
请注意,颜色是动态分配的并且不一致,例如,如果显示所有颜色,则星期四为绿色,但在单独选择时变为蓝色。这不直观,可以改进。
推荐阅读
- c# - 基于用户 ID 的灵活命名分区的领域同步权限
- python - 从python中的函数中打印函数的id
- android - 获取当前在 GoogleMap 上可见的 POI(兴趣点)列表?
- python-3.x - 删除数组结果中不必要的信息
- facebook - 关闭并重新打开互联网时,使用 facebook 和 google 登录的 Firebase 身份验证不起作用
- c++ - ubuntu 20.04 上的 c++17 并行算法和 CMake
- php - Yii2 memcached 不工作但 php 简单连接工作
- excel - VBA在5个整数列表中获取前2个整数值
- xcode - 如何永久更改 xcode 默认的“构建设置”
- sql - 当我尝试在 sql 的视图中更改 max(value) 的列名时,它显示错误