diff --git a/plots.py b/plots.py
index 431cf55..9a645da 100644
--- a/plots.py
+++ b/plots.py
@@ -2,6 +2,7 @@
import plotly.graph_objects as go
import polars as pl
+from theme import ColorPalette
def plot_average_scores_with_counts(
@@ -9,7 +10,7 @@ def plot_average_scores_with_counts(
title: str = "General Impression (1-10)
Per Voice with Number of Participants Who Rated It",
x_label: str = "Stimuli",
y_label: str = "Average General Impression Rating (1-10)",
- color: str = "#0077B6",
+ color: str = ColorPalette.PRIMARY,
height: int = 500,
width: int = 1000,
) -> go.Figure:
@@ -74,16 +75,16 @@ def plot_average_scores_with_counts(
yaxis_title=y_label,
height=height,
width=width,
- plot_bgcolor='white',
+ plot_bgcolor=ColorPalette.BACKGROUND,
xaxis=dict(
showgrid=True,
- gridcolor='lightgray',
+ gridcolor=ColorPalette.GRID,
tickangle=-45
),
yaxis=dict(
range=[0, 10],
showgrid=True,
- gridcolor='lightgray'
+ gridcolor=ColorPalette.GRID
),
font=dict(size=11)
)
@@ -96,7 +97,7 @@ def plot_top3_ranking_distribution(
title: str = "Top 3 Rankings Distribution
Count of 1st, 2nd, and 3rd Place Votes per Voice",
x_label: str = "Voices",
y_label: str = "Number of Mentions in Top 3",
- height: int = 600,
+ height: int = 500,
width: int = 1000,
) -> go.Figure:
"""
@@ -161,7 +162,7 @@ def plot_top3_ranking_distribution(
name='Rank 1 (1st Choice)',
x=labels,
y=stats_df['Rank 1'],
- marker_color='#004C6D', # Dark Blue
+ marker_color=ColorPalette.RANK_1,
hovertemplate='%{x}
Rank 1: %{y}'
))
@@ -169,7 +170,7 @@ def plot_top3_ranking_distribution(
name='Rank 2 (2nd Choice)',
x=labels,
y=stats_df['Rank 2'],
- marker_color='#008493', # Teal
+ marker_color=ColorPalette.RANK_2,
hovertemplate='%{x}
Rank 2: %{y}'
))
@@ -177,7 +178,7 @@ def plot_top3_ranking_distribution(
name='Rank 3 (3rd Choice)',
x=labels,
y=stats_df['Rank 3'],
- marker_color='#5AAE95', # Sea Green
+ marker_color=ColorPalette.RANK_3,
hovertemplate='%{x}
Rank 3: %{y}'
))
@@ -188,15 +189,15 @@ def plot_top3_ranking_distribution(
yaxis_title=y_label,
height=height,
width=width,
- plot_bgcolor='white',
+ plot_bgcolor=ColorPalette.BACKGROUND,
xaxis=dict(
showgrid=True,
- gridcolor='lightgray',
+ gridcolor=ColorPalette.GRID,
tickangle=-45
),
yaxis=dict(
showgrid=True,
- gridcolor='lightgray'
+ gridcolor=ColorPalette.GRID
),
legend=dict(
orientation="h",
diff --git a/theme.py b/theme.py
new file mode 100644
index 0000000..be5658a
--- /dev/null
+++ b/theme.py
@@ -0,0 +1,21 @@
+"""
+Color palette and style definitions for Voice Branding analysis plots.
+"""
+
+class ColorPalette:
+ """
+ Consistent color palette for all visualizations.
+ Update colors here to propagate changes to all plots.
+ """
+ # Primary brand/chart color
+ PRIMARY = "#0077B6" # Medium Blue
+
+ # Gradient for rankings (Darkest -> Lightest or Strong -> Soft)
+ RANK_1 = "#004C6D" # Dark Blue (1st Choice)
+ RANK_2 = "#008493" # Teal (2nd Choice)
+ RANK_3 = "#5AAE95" # Sea Green (3rd Choice)
+
+ # General UI elements
+ TEXT = "black"
+ GRID = "lightgray"
+ BACKGROUND = "white"