import plotly.express as px from .data_utils import generate_data async def plot_ratings(criteria : str): """ Plot different ratings of the models for a given criteria on a line graph. Args: criteria (str): The criteria to plot the ratings for. """ data = await generate_data() elo_data = data[data['Criteria'] == criteria].reset_index(drop=True) elo_data.reset_index(inplace=True) elo_data['index'] = elo_data['index'].apply(lambda x: int(x/2)) elo_fig = px.line(elo_data, x='index', y='Elo', color='Model', title='Elo Ratings Over Total Votes', labels={'index': 'Total Votes', 'Elo': 'Elo Rating'}) wr_data = data[data['Criteria'] == criteria].reset_index(drop=True) wr_data.reset_index(inplace=True) wr_data['index'] = wr_data['index'].apply(lambda x: int(x/2)) wr_fig = px.line(wr_data, x='index', y='Win Rate', color='Model', title='Win Rates Over Total Votes', labels={'index': 'Total Votes', 'Win Rate': 'Win Rate'}) matches_data = data[data['Criteria'] == criteria].reset_index(drop=True) matches_data.reset_index(inplace=True) matches_data['index'] = matches_data['index'].apply(lambda x: int(x/2)) matches_fig = px.line(matches_data, x='index', y='Matches', color='Model', title='Matches Played Over Total Votes', labels={'index': 'Total Votes', 'Matches': 'Matches Played'}) return elo_fig, wr_fig, matches_fig