kmrambo
January 12, 2018, 10:57am
1
I have implemented tabs in my UI. The UI has 4 tabs totally. The code by which tabs was created is shown below:
html.Div([
dcc.Tabs(
tabs=[
{'label': 'Home', 'value': 1},
{'label': 'Test Accuracy', 'value': 2},
{'label': 'Help', 'value': 3},
{'label': 'About', 'value': 4},
],
value=1,
id='tabs',
vertical = vertical
),
html.Div(id='tab-output')
], style={
'width': '80%',
'fontFamily': 'Sans-Serif',
'margin-left': '1cm',
'margin-right': 'auto'
})
In the above code, when tab number 2 with value=‘2’ is clicked by the user, I want to display an attractive pie chart which depicts the value 95 out of 100 (95/100). I have no idea on how to invoke an app callback when tab number 2 is clicked. I tried the following callback piece of code and it didn’t work:
@app.callback (Output(‘pie-chart’, ‘children’), [], [State(‘tabs’, ‘value’)], [Event(‘tabs’, ‘click’)])
Any code that was defined in the above block didn’t work. Also please suggest on how to implement the pie chart.
The Dash user guide is quite helpful: https://plot.ly/dash/ . Adapted from one of @chriddyp ’s examples:
import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output, State
app = dash.Dash()
def app_layout():
return(
html.Div([
dcc.Tabs(
tabs=[{'label': 'Pie1', 'value': 1},
{'label': 'Pie2', 'value': 2},
{'label': 'Pie3', 'value': 3},
{'label': 'Pie4', 'value': 4}
],
value=1,
id='tabs'
),
html.Div(id='output-tab')
])
)
app.layout=app_layout()
@app.callback(Output('output-tab', 'children'),
[Input('tabs', 'value')])
def display_content(value):
data = [
{
'values': [[10,90],[5, 95],[15,85],[20,80]][int(value)-1],
'type': 'pie',
},
]
return html.Div([
dcc.Graph(
id='graph',
figure={
'data': data,
'layout': {
'margin': {
'l': 30,
'r': 0,
'b': 30,
't': 0
},
'legend': {'x': 0, 'y': 1}
}
}
)
])
if __name__ == '__main__':
app.server.run(debug=True)
2 Likes
Thanks @emunson . Found this really helpful!!
@emunson How do I change the font size of the displayed values in these pie-charts? I also want to display my own legends
In your ‘data’ dict, add:
data=[
{
'labels': ['Oxygen','Hydrogen'],
'textfont': {'size': 20}
}
I’m not sure what you mean by ‘my own legends’. Any plotly pie chart attribute is available to you, here is a good starting point: https://plot.ly/python/pie-charts/