none commited on
Commit
64a9c12
1 Parent(s): 7b7c508

Add donut plot

Browse files
Files changed (1) hide show
  1. app.py +53 -4
app.py CHANGED
@@ -3,6 +3,7 @@ import joblib
3
  import time
4
 
5
  import plotly.graph_objects as go
 
6
  import streamlit as st
7
  import pandas as pd
8
  import numpy as np
@@ -193,6 +194,46 @@ def breadth_first_traverse(tree):
193
 
194
  return visited_nodes
195
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
196
 
197
  def main():
198
  # load the data
@@ -211,6 +252,10 @@ def main():
211
  st.markdown('## Setting the scene')
212
  st.markdown("""
213
  I make a lot of dashboards, which means I make a lot of the same plots over and over.
 
 
 
 
214
  Desperate for some creative outlet, I wanted to make a new visualization—
215
  something I'd never seen before.
216
  Inspired by interactive visualizations like
@@ -330,8 +375,8 @@ It takes a second to get going after you hit `Play`.
330
  'method': 'animate',
331
  'args':[None, {
332
  'fromcurrent': True,
333
- 'frame': {'duration':5000},
334
- 'transition': {'duration': 2500},
335
  }],
336
  },
337
  {
@@ -363,7 +408,8 @@ That helpful poster didn't point out any other examples, so that one is still pr
363
  Later on,
364
  [a different answer by the same poster](https://community.plotly.com/t/animation-with-slider-not-moving-when-pressing-play/34763)
365
  got me out of a jam.
366
- As far as I can tell, this poster `empet` is the only person in the world who understands Plotly's animations in Python.
 
367
  """)
368
 
369
  st.markdown('## Check out the data!')
@@ -392,13 +438,16 @@ This plot is similar to the plot above, but the slider here coordinates with a t
392
  st.plotly_chart(figures[idx])
393
  st.dataframe(trees[idx])
394
  st.markdown("""
395
- This section is mostly just to warn you against making the same foolhardy decision to marry the innermost guts of SciKit-Learn to the sparsely documented world of Python Plotly animations.
396
 
397
  I'm glad it was challenging, though.
398
  I did go into this hoping for something more interesting than a donut plot.
399
  Maybe I'll think on the `value` and `gain` fields a bit and come up with a version 2.
400
  """)
401
 
 
 
 
402
  if __name__=='__main__':
403
  main()
404
 
 
3
  import time
4
 
5
  import plotly.graph_objects as go
6
+ import plotly.express as px
7
  import streamlit as st
8
  import pandas as pd
9
  import numpy as np
 
194
 
195
  return visited_nodes
196
 
197
+ def build_donut_plot():
198
+ display_duration = ['a moment', 'an eternity']
199
+ legend_name = [
200
+ '<br>researching the data,<br>cleaning the data,<br>and building the model<br>for this project',
201
+ 'battling Plotly'
202
+ ]
203
+ duration = [1, 19]
204
+ df = pd.DataFrame().from_dict({'duration': duration, 'legend_name': legend_name, 'display_duration': display_duration})
205
+
206
+ fig = px.pie(
207
+ df,
208
+ values='duration',
209
+ names='legend_name',
210
+ hover_name='display_duration',
211
+ # The docs claim this is okay.
212
+ # Turns out, this is not okay
213
+ # because Plotly tries to call .append() on whatever you pass to `hover_data`
214
+ # but only if you pass something to `color`
215
+ # so I can't set the color if I want to turn off columns in the hover text
216
+ hover_data={'duration': False, 'legend_name': False},
217
+ #color=display_duration,
218
+ #color_discrete_map={display_duration[0]:'fuschia', display_duration[1]:'rebecca_purple'},
219
+ hole=0.6,
220
+ #title="Believe it or not, a bug in Plotly means I can't change these colors"
221
+ title="I suppose one more donut won't kill me"
222
+
223
+ )
224
+
225
+ fig.update_traces(
226
+ textinfo='none',
227
+ hoverlabel={'font':{'size': 20}},
228
+ # This has no effect for some reason
229
+ # even though `hoverlabel` and `textinfo` work just fine
230
+ marker_colors=['fuschia', 'rebecca_purple'],
231
+ selector=dict(type='pie')
232
+
233
+ )
234
+
235
+ return fig
236
+
237
 
238
  def main():
239
  # load the data
 
252
  st.markdown('## Setting the scene')
253
  st.markdown("""
254
  I make a lot of dashboards, which means I make a lot of the same plots over and over.
255
+ """)
256
+ st.plotly_chart(build_donut_plot())
257
+
258
+ st.markdown("""
259
  Desperate for some creative outlet, I wanted to make a new visualization—
260
  something I'd never seen before.
261
  Inspired by interactive visualizations like
 
375
  'method': 'animate',
376
  'args':[None, {
377
  'fromcurrent': True,
378
+ 'frame': {'duration':4000},
379
+ 'transition': {'duration': 2000},
380
  }],
381
  },
382
  {
 
408
  Later on,
409
  [a different answer by the same poster](https://community.plotly.com/t/animation-with-slider-not-moving-when-pressing-play/34763)
410
  got me out of a jam.
411
+ This `empet` character is pretty much the only one who answers Python posts on Plotly's forums.
412
+ As far as I can tell, that's because they're the only person in the world who understands Plotly's Python library.
413
  """)
414
 
415
  st.markdown('## Check out the data!')
 
438
  st.plotly_chart(figures[idx])
439
  st.dataframe(trees[idx])
440
  st.markdown("""
441
+ This section is mostly just to warn you against making the same foolhardy decision to marry the innermost guts of SciKit-Learn to the sparsely documented world of Plotly animations in Python.
442
 
443
  I'm glad it was challenging, though.
444
  I did go into this hoping for something more interesting than a donut plot.
445
  Maybe I'll think on the `value` and `gain` fields a bit and come up with a version 2.
446
  """)
447
 
448
+
449
+
450
+
451
  if __name__=='__main__':
452
  main()
453