データセットからのtotal_bill
vsの散布図を表示するダッシュアプリを作成しました。複数の日を選択できるドロップダウンメニューがあるので、選択した日で散布図に色を付けることができます。tip
tips
days
ドロップダウンから何も選択されていない場合、散布図はすべての日で色付けされます。ドロップダウンで1日または複数日を選択すると、選択した日だけで散布図に色が付けられます。
私のアプリコードは以下の通りです。問題は、ドロップダウンをクリアすると、グラフも空になることです。それは、すべての日によって色付けされた散布図を示すことになっています。
なぜそれが起こるのか誰かが知っていますか?どうすれば問題を解決できますか。私はこれに何時間も費やしていますが、解決策を見つけることができません。
よろしくお願いします。
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)
色は動的に割り当てられ、一貫性がないことに注意してください。たとえば、すべての色が表示されている場合は木曜日は緑ですが、単独で選択すると青になります。これは直感的ではなく、改善される可能性があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加