diff options
Diffstat (limited to 'backend/graph.py')
| -rw-r--r-- | backend/graph.py | 34 |
1 files changed, 21 insertions, 13 deletions
diff --git a/backend/graph.py b/backend/graph.py index 38cc8bb..f7d8716 100644 --- a/backend/graph.py +++ b/backend/graph.py @@ -1,27 +1,35 @@ -import plotly.graph_objs as go +import plotly.graph_objects as go +import plotly.express as px import pandas as pd import warnings +from member_colors import member_color_map +import random -def plot_subscriber_count_over_time(server, table_name, gtitle = "Subscriber Count Over Time for Phase Connect Members", - overrideQuery = None, markers = "lines", exclude_channels = []): - warnings.filterwarnings('ignore') # Ignore pandas warning regarding pyodbc +def plot_subscriber_count_over_time(server, table_name, gtitle="Subscriber Count Over Time for Phase Connect Members", + overrideQuery=None, markers="lines", exclude_channels=[]): + warnings.filterwarnings('ignore') # Ignore pandas warning regarding pyodbc query = f"SELECT name, subscriber_count, timestamp, channel_id FROM {table_name} ORDER by timestamp DESC" if overrideQuery is None else overrideQuery df = pd.read_sql_query(query, server.get_connection()) groups = df.groupby("name") fig = go.Figure() config = dict({'responsive': True, 'displaylogo': False, 'modeBarButtonsToAdd': ['pan2d', 'zoomIn2d', 'zoomOut2d']}) + for channel, group in groups: if len(exclude_channels) != 0 and group['channel_id'].iloc[0] in exclude_channels: continue + color = None + color = member_color_map.get(channel, '#' + ''.join(random.choices('0123456789ABCDEF', k=6))) + fig.add_trace(go.Scattergl( - x = group["timestamp"], y = group["subscriber_count"], name = channel, mode = markers, - showlegend = True)) + x=group["timestamp"], y=group["subscriber_count"], name=channel, mode=markers, + showlegend=True, line=dict(color=color))) + fig.update_layout( - title = {'text': gtitle, 'x': 0.5, 'xanchor': 'center', - 'yanchor': 'top', 'font': {'family': 'Droid Sans', 'size': 30}}, - xaxis_title = "Date", - yaxis_title = "Subscribers", - legend = dict(font = dict(size = 16), title = dict(text = "Channels")), - height = 950, + title={'text': gtitle, 'x': 0.5, 'xanchor': 'center', + 'yanchor': 'top', 'font': {'family': 'Droid Sans', 'size': 30}}, + xaxis_title="Date", + yaxis_title="Subscribers", + legend=dict(font=dict(size=16), title=dict(text="Channels")), + height=950, ) - return fig.to_html(config = config)
\ No newline at end of file + return fig.to_html(config=config) |
