File size: 2,453 Bytes
			
			| 0c61244 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
from plotly.subplots import make_subplots
# Reusable function to create subplots
def create_lac_count_per_controller_subplots(
    df: pd.DataFrame,
    controller_column: str,
    lac_column: str,
    count_column: str,
    fig_title: str,
):
    # Get unique controller_IDs
    unique_controllers = df[controller_column].unique()
    # Calculate the number of rows needed (4 subplots per row)
    rows_needed = (len(unique_controllers) + 3) // 4  # Round up to ensure enough rows
    # Create subplot structure with a dynamic number of rows and 4 columns per row
    fig = make_subplots(
        rows=rows_needed,
        cols=4,
        shared_xaxes=False,
        subplot_titles=unique_controllers,
    )
    # Add a counter for positioning the subplots
    subplot_position = 1
    # Iterate over each controller_ID
    for controller in unique_controllers:
        # Filter data for each controller_ID (create a small dataframe per controller_ID)
        controller_data = df[df[controller_column] == controller]
        # Determine the row and column for the current subplot
        row = (subplot_position - 1) // 4 + 1
        col = (subplot_position - 1) % 4 + 1
        # Add bar chart to the subplot
        fig.add_trace(
            go.Bar(
                x=controller_data[lac_column],
                y=controller_data[count_column],
                name=controller,
                text=controller_data[count_column],
            ),
            row=row,
            col=col,
        )
        # Move to the next subplot position
        subplot_position += 1
    # Update layout to make it more readable and fit all subplots
    fig.update_layout(
        height=300 * rows_needed,
        title_text=fig_title,
        showlegend=False,
    )
    # Show the plot
    # fig.show()
    return fig
def create_bar_chart(df: pd.DataFrame, title: str = "Chart Title") -> px.bar:
    """
    Create a bar chart using Plotly Express with the first column as x and the second column as y.
    Args:
        df (pd.DataFrame): Input DataFrame
    Returns:
        fig (px.bar): Bar chart figure
    """
    fig = px.bar(
        df,
        x=df.columns[0],
        y=df.columns[1],
        text_auto=True,
        title=title,
        height=300,
        width=600,
    )
    fig.update_xaxes(tickvals=df[df.columns[0]].unique())
    return fig
 |