Source code for dopo.dash.plot.plot

import plotly.graph_objects as go
import pandas as pd


[docs] def prepare_dataframe(df, sector, impact): # Select the initial filtered data for the first sector and method filtered_data = df[sector] if not isinstance(impact, str): impact = str(impact) filtered_data = pd.DataFrame.from_dict(filtered_data) filtered_data = filtered_data.loc[ (filtered_data["method"] == "-".join(list(eval(impact)))), : ] # Add a descriptive name to each entry for the plot filtered_data["name"] = filtered_data.apply( lambda x: f"{x['activity']} - {x['location']} - {x['database']}", axis=1 ) return filtered_data
[docs] def contribution_plot(df, sector, impact_assessment): fig = go.Figure() for input_name in df["input"].unique(): input_data = df[df["input"] == input_name] fig.add_trace( go.Bar(x=input_data["name"], y=input_data["score"], name=input_name) ) # Update layout for stacked bar plot fig.update_layout( barmode="stack", title=f"{sector} analysis - {impact_assessment}", xaxis_title="Activity", yaxis_title=input_data["method unit"].iloc[0], legend_title="Input", height=700, xaxis=dict(showticklabels=False), plot_bgcolor='white' ) return fig
[docs] def scores_plot(df, sector, impact_assessment): """ Scatter plot of scores for each activity in the sector. Add a line for the average score. Add a line for standard deviation above and below the average score. """ fig = go.Figure() df = df[["name", "score", "method unit"]].groupby(["name", "method unit"]).sum().reset_index() # Add scatter plot of scores (the sum of all inputs) fig.add_trace( go.Scatter(x=df["name"], y=df["score"], mode='markers', name='Score', marker=dict(size=12)) ) # Add average score line avg_score = df["score"].mean() fig.add_trace( go.Scatter(x=df["name"], y=[avg_score]*len(df), mode='lines', name='Average', line=dict(color='black', width=2)) ) # Add median score line median_score = df["score"].median() fig.add_trace( go.Scatter(x=df["name"], y=[median_score]*len(df), mode='lines', name='Median', line=dict(color='green', width=2)) ) # Add standard deviation lines std_dev = df["score"].std() fig.add_trace( go.Scatter(x=df["name"], y=[avg_score + std_dev]*len(df), mode='lines', name='Average + Std Dev', line=dict(color='blue', width=2)) ) fig.add_trace( go.Scatter(x=df["name"], y=[avg_score - std_dev]*len(df), mode='lines', name='Average - Std Dev', line=dict(color='blue', width=2)) ) # Add 5th percentile line percentile_5 = df["score"].quantile(0.05) fig.add_trace( go.Scatter(x=df["name"], y=[percentile_5]*len(df), mode='lines', name='5th Percentile', line=dict(color='red', width=2)) ) # Add 95th percentile line percentile_95 = df["score"].quantile(0.95) fig.add_trace( go.Scatter(x=df["name"], y=[percentile_95]*len(df), mode='lines', name='95th Percentile', line=dict(color='red', width=2)) ) # Update layout for scatter plot fig.update_layout( title=f"{sector} analysis - {impact_assessment}", xaxis_title="Activity", yaxis_title=df["method unit"].iloc[0], legend_title="Input", height=700, xaxis=dict(showticklabels=False), plot_bgcolor='white' ) return fig