Spaces:
Runtime error
Runtime error
| import pandas as pd | |
| import plotly.graph_objects as go | |
| def generate_horizontal_boxplot(dataFrame: pd.DataFrame, id_column: str, features: list[str], | |
| color_dict: dict[str, str], title: str, yaxis_title: str, xaxis_title: str, | |
| height: float = 900, width: float = 2600) -> go.Figure: | |
| ''' | |
| Returns a boxplot for Height data features (columns), after generating a melted data table for | |
| these features. | |
| Parameters: | |
| ------------------------------------------------------------------------------------------------------------ | |
| dataFrame: Name of a pandas DataFrame(two-dimensional, size-mutable, potentially heterogeneous tabular data) | |
| id_column: Name of the dataFrame's column to be used as the id column of the melted dataFrame | |
| features: List of the dataFrame Height columns to be visualized | |
| color_dict: Custom dictionary for the features, containing the colors for each feature | |
| title: Title of the boxplot | |
| yaxis_title: Title of the y-axis | |
| xaxis_title: Title of the x-axis | |
| height: Height of the plot; default is 900 | |
| width: Width of the plot; default is 2600 | |
| ------------------------------------------------------------------------------------------------------------ | |
| ''' | |
| # Melt the DataFrame to long format for plotting | |
| melted_data = pd.melt(dataFrame, id_vars = [id_column], value_vars = features, | |
| var_name = "Height(cm)", value_name = "Height") | |
| # Sort the DataFrame by "HeightType" and "Height" in ascending order | |
| melted_data = melted_data.sort_values([id_column, "Height"]) | |
| # Create traces for the horizontal box plot | |
| traces = [] | |
| for height_type, color in color_dict.items(): | |
| height_data = melted_data[melted_data["Height(cm)"] == height_type] | |
| trace = go.Box( | |
| y = height_data["Height(cm)"], x = height_data["Height"], name = height_type, | |
| boxpoints = "all", marker_color = color, orientation = "h") | |
| traces.append(trace) | |
| # Create boxplot's layout | |
| layout = go.Layout( | |
| height = height, | |
| width = width, | |
| title = dict(text = title, font = dict(size = 28, family = "Times New Roman")), | |
| yaxis = dict(title = yaxis_title, titlefont = dict(size = 20, family = "Times New Roman"), tickfont = dict(size = 18, family = "Times New Roman")), | |
| xaxis = dict(title = xaxis_title, titlefont = dict(size = 20, family = "Times New Roman"), tickfont = dict(size = 18, family = "Times New Roman")), | |
| legend = dict( | |
| title = dict(text = xaxis_title, font = dict(family = "Times New Roman", size = 20)), | |
| traceorder = "normal", | |
| font = dict(family = "Times New Roman", size = 17))) | |
| # Create figure | |
| fig = go.Figure(data = traces, layout = layout) | |
| return fig |