Visualizers#

Plotly chart-creation functions consumed by the dashboard: a pandas-based version and a PyArrow-only version with no pandas dependency.

Attribution visualization module — Plotly versions of the matplotlib charts.

Provides chart-creation functions that return Plotly Figure objects for use in the Dash dashboard.

create_brinson_fachler_chart(brinson_fachler_indexes: DataFrame) → Figure[source]#

Create the 3-panel Brinson-Fachler attribution chart.

Replicates BrinstonFachlerAttribution.attribution_plots() in Plotly.

Panels:
  1. Strategy vs Benchmark Returns

  2. Cumulative Alpha

  3. Allocation, Selection, Interaction Effects

create_decomposition_bar_chart(total_pct: Series) → Figure[source]#

Create a horizontal bar chart of end-of-period factor contributions.

Replicates FactorModelAttribution.last_day_decomposition() in Plotly.

create_drawdown_chart(portfolio_returns: Series) → Figure[source]#

Create drawdown analysis chart.

create_factor_attribution_chart(simulated_rets: DataFrame) → Figure[source]#

Create the main 3-panel factor attribution line chart.

Replicates FactorModelAttribution.attribution_plots() in Plotly.

Panels:
  1. Total / Factor / Idiosyncratic cumulative returns

  2. Style Factors

  3. Industry Returns (non-zero columns only)

create_factor_attribution_summary_chart(simulated_rets: DataFrame) → Figure[source]#

Create a compact attribution chart showing just the 3 main series.

Used in the main charts row (large chart).

create_returns_distribution(portfolio_returns: Series) → Figure[source]#

Create returns distribution analysis (histogram + time series).

create_stacked_decomposition_chart(pct_df_returns: DataFrame, days_of_smoothing: int = 45) → Figure[source]#

Create a normalized stacked area chart of factor return decomposition.

Replicates FactorModelAttribution.plot_stacked_weights_normalized() in Plotly. Each factor’s share = abs(factor) / sum(abs(all factors)), always sums to 100%.

Attribution visualization module — Plotly charts using PyArrow tables.

Provides chart-creation functions that return Plotly Figure objects for use in the Dash dashboard, without any pandas dependency. All data extraction uses pa.Table / pyarrow.compute and plain Python lists.

create_brinson_fachler_chart(brinson_fachler_indexes: Table, date_column: str = 'date') → Figure[source]#

Create the 3-panel Brinson-Fachler attribution chart.

Panels:
  1. Strategy vs Benchmark Returns

  2. Cumulative Alpha

  3. Allocation, Selection, Interaction Effects

create_decomposition_bar_chart(total_pct: dict) → Figure[source]#

Create a horizontal bar chart of end-of-period factor contributions.

Parameters:

total_pct (dict) – {factor_name: contribution_fraction} — e.g. from FactorModelArrowAttribution.cummulative_pct_decomp().

create_drawdown_chart(portfolio_returns: Table, date_column: str = 'date', value_column: str = 'portfolio_returns') → Figure[source]#

Create drawdown analysis chart.

Computes cumulative returns, running max, and drawdown entirely with Python lists (no pandas).

create_factor_attribution_chart(simulated_rets: Table, date_column: str = 'date') → Figure[source]#

Create the main 3-panel factor attribution line chart.

Replicates FactorModelAttribution.attribution_plots() in Plotly.

Panels:
  1. Total / Factor / Idiosyncratic cumulative returns

  2. Style Factors

  3. Industry Returns (non-zero columns only)

create_factor_attribution_summary_chart(simulated_rets: Table, date_column: str = 'date') → Figure[source]#

Create a compact attribution chart showing just the 3 main series.

Used in the main charts row (large chart).

create_returns_distribution(portfolio_returns: Table, date_column: str = 'date', value_column: str = 'portfolio_returns') → Figure[source]#

Create returns distribution analysis (histogram + time series).

create_stacked_decomposition_chart(pct_df_returns: Table, date_column: str = 'date', days_of_smoothing: int = 45) → Figure[source]#

Create a normalized stacked area chart of factor return decomposition.

Each factor’s share = abs(factor) / sum(abs(all factors)), always sums to 100%. Implemented with pure pyarrow + Python lists (no pandas).