Znovupoužitelné Dash komponenty
Tvoje dashboardy si získávají stále více pozornosti – zejména nedávná aplikace s výběrem data. Nadřízený manažer ji ocenil, ale požádal o úpravy: použij firemní logo ve schváleném stylu a zobraz ho na více místech.
Aby byl kód přehledný, je čas vytvořit znovupoužitelnou Python funkci pro logo.
Schválený styl loga je:
'width':'75px', 'margin':'20px 20px 5px 5px', 'border':'1px dashed lightblue', 'display':'inline-block'
Toto cvičení je součástí kurzu
Tvorba dashboardů s Dash a Plotly
Pokyny k cvičení
- Pod řádek
11vytvoř znovupoužitelnou funkci komponenty s názvemadd_logo(), která vrátí komponentucorp_logo. - Uvnitř této funkce vytvoř pod řádek
13Dash element obrázku s názvemcorp_logopomocí příslušné HTML komponenty s uvedeným stylem. - Zavolej funkci
add_logo()na každém ze 4 označených míst pod řádky20,27,30a46.
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
from dash import Dash, dcc, html, Input, Output, callback
import plotly.express as px
import pandas as pd
from datetime import datetime, date
ecom_sales = pd.read_csv('/usr/local/share/datasets/ecom_sales.csv')
logo_link = 'https://assets.datacamp.com/production/repositories/5893/datasets/fdbe0accd2581a0c505dab4b29ebb66cf72a1803/e-comlogo.png'
ecom_sales['InvoiceDate'] = pd.to_datetime(ecom_sales['InvoiceDate'])
app = Dash()
# Create a reusable component function called add_logo
____ ____():
# Create a Dash image element
corp_logo = ____(
src=logo_link,
style={'width':'75px', 'margin':'20px 20px 5px 5px', 'border':'1px dashed lightblue', 'display':'inline-block'})
return corp_logo
app.layout = [
# Insert the logo (1)
____,
html.Br(),
html.H1('Sales breakdowns'),
html.Br(),
html.Br(),
html.Div([
# Insert the logo (2)
____,
html.H2('Controls', style={'margin':'0 10px','display':'inline-block'}),
# Insert the logo (3)
____,
html.H3('Sale Date Select'),
html.Br(),
dcc.DatePickerSingle(
id='sale_date',
min_date_allowed=ecom_sales.InvoiceDate.min(),
max_date_allowed=ecom_sales.InvoiceDate.max(),
initial_visible_month=date(2011, 4, 1),
date=date(2011, 4, 11),
style={'width':'200px', 'margin':'0 auto'})],
style={'width':'350px', 'height':'350px', 'display':'inline-block', 'vertical-align':'top', 'border':'1px solid black', 'padding':'20px'}),
html.Div([
dcc.Graph(id='sales_cat'),
html.H2('Daily Sales by Major Category', style={'border':'2px solid black', 'width':'400px', 'margin':'0 auto'})],
style={'width':'700px','display':'inline-block'}),
# Insert the logo (4)
____
]
@callback(
Output(component_id='sales_cat', component_property='figure'),
Input(component_id='sale_date', component_property='date')
)
def update_plot(input_date):
sales = ecom_sales.copy(deep=True)
if input_date:
sales = sales[sales['InvoiceDate'] == input_date]
ecom_bar_major_cat = sales.groupby('Major Category')['OrderValue'].agg('sum').reset_index(name='Total Sales ($)')
bar_fig_major_cat = px.bar(
title=f'Sales on: {input_date}',data_frame=ecom_bar_major_cat, orientation='h',
x='Total Sales ($)', y='Major Category')
return bar_fig_major_cat
if __name__ == '__main__':
app.run(debug=True)