Note
Click here to download the full example code
10. Weather Ho Chi Minh (sparklines)
This Python script creates a stacked sparkline dashboard to visualize weather data from Ho Chi Minh City.
The script reads multiple weather data files, combines them, and then generates a tall figure containing a series of small, individual area charts (one for each weather metric like temperature, humidity, etc.), all sharing the same time axis.
13 # -------------------
14 # Main
15 # -------------------
16 # https://chart-studio.plotly.com/~empet/13748/sparklines/#/code
17 # https://omnipotent.net/jquery.sparkline/#s-about
18 # https://chart-studio.plotly.com/create/?fid=Dreamshot:8025#/
19
20 # Libraries
21 import glob
22 import numpy as np
23 import pandas as pd
24 import plotly.express as px
25 import plotly.graph_objects as go
26
27 from pandas.tseries.offsets import DateOffset
28 from plotly.subplots import make_subplots
29 from plotly.io import show
30
31 try:
32 __file__
33 TERMINAL = True
34 except:
35 TERMINAL = False
36
37 # Constants
38 colors = px.colors.sequential.Viridis_r
39 colors += px.colors.sequential.Viridis_r
40
41 # -------------------
42 # Load data
43 # -------------------
44 # Define folder
45 folder = '../../datasets/weather-hmc-dataset/'
46
47 # Load data
48 data = pd.concat([pd.read_csv(f) \
49 for f in glob.glob('%s/*.csv' % folder)])
50
51 # Drop duplicates
52 data = data.drop_duplicates()
53 data['dates'] = pd.to_datetime(data['Date time'])
54 data = data.set_index('dates')
55 data = data.drop(columns=['Name',
56 'Date time',
57 'Conditions'])
58
59 if TERMINAL:
60 print("\nData:")
61 print(data)
62 data
63
64
65 # ----------------
66 # Visualize
67 # ----------------
68 # Create layout
69 layout = {
70 "font": {"family": "Georgia, serif"},
71 "title": "Weather Ho Chi Minh",
72 #"width": 500,
73 "height": 1000,
74 #"margin": {"t": 80},
75 "paper_bgcolor": 'rgba(0,0,0,0)', # transparent
76 "plot_bgcolor": 'rgba(0,0,0,0)', # transparent
77 #"autosize": False,
78 "hovermode": "closest",
79 "showlegend": False,
80 }
81
82 # Create figure
83 fig = make_subplots(rows=data.shape[1], cols=1,
84 shared_xaxes=True,
85 subplot_titles=[t for t in data.columns])
86
87 # Add traces
88 for i, column in enumerate(data.columns):
89 # Colors
90 c = colors[i]
91 x = data.index
92 y = data[column]
93
94 # Add trace
95 fig.add_trace(go.Scatter(x=x, y=y,
96 name=column,
97 mode='lines', fill='tozeroy',
98 line=dict(color=c, width=0.5)),
99 row=i+1, col=1)
100
101 # Update axes
102 fig.update_yaxes(title_text='', row=i+1, col=1)
103
104 # Update layout
105 fig.update_layout(layout)
106
107 # Show
108 show(fig)
Total running time of the script: ( 0 minutes 2.446 seconds)