diff --git a/plots/alluvial-basic/implementations/python/highcharts.py b/plots/alluvial-basic/implementations/python/highcharts.py index 8dd770c07e..b8f56acf8f 100644 --- a/plots/alluvial-basic/implementations/python/highcharts.py +++ b/plots/alluvial-basic/implementations/python/highcharts.py @@ -23,7 +23,7 @@ INK = "#1A1A17" if THEME == "light" else "#F0EFE8" INK_SOFT = "#4A4A44" if THEME == "light" else "#B8B7B0" -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3"] # Data - Voter migration between political parties across 3 elections # Format: [from_node, to_node, flow_count] @@ -52,9 +52,9 @@ # Party colors using Okabe-Ito palette party_colors = { - "Democratic": OKABE_ITO[0], # #009E73 - "Independent": OKABE_ITO[1], # #D55E00 - "Republican": OKABE_ITO[2], # #0072B2 + "Democratic": IMPRINT[0], # #009E73 + "Independent": IMPRINT[1], # #C475FD + "Republican": IMPRINT[2], # #4467A3 } # Column positions for time ordering @@ -212,15 +212,15 @@
-
+
Democratic
-
+
Independent
-
+
Republican
diff --git a/plots/andrews-curves/implementations/python/highcharts.py b/plots/andrews-curves/implementations/python/highcharts.py index 2f09564bab..4f6cc80270 100644 --- a/plots/andrews-curves/implementations/python/highcharts.py +++ b/plots/andrews-curves/implementations/python/highcharts.py @@ -28,7 +28,7 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" BRAND = "#009E73" -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3"] iris = load_iris() X = StandardScaler().fit_transform(iris.data) @@ -125,7 +125,7 @@ def andrews_curve(x, t): series = SplineSeries() series.data = data_points series.name = species_names[species_idx] - series.color = OKABE_ITO[species_idx] + series.color = IMPRINT[species_idx] series.opacity = 0.5 series.show_in_legend = i == 0 series.line_width = 2 diff --git a/plots/area-cumulative-flow/implementations/python/highcharts.py b/plots/area-cumulative-flow/implementations/python/highcharts.py index b7bf378060..df0ae7af19 100644 --- a/plots/area-cumulative-flow/implementations/python/highcharts.py +++ b/plots/area-cumulative-flow/implementations/python/highcharts.py @@ -27,7 +27,7 @@ INK_SOFT = "#4A4A44" if THEME == "light" else "#B8B7B0" GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7", "#E69F00"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233", "#AE3030"] # Data — 90-day Kanban board with 5 workflow stages np.random.seed(42) @@ -131,11 +131,11 @@ # Highcharts reversedStacks=true (default): first added series = visual TOP. # Add top→bottom so Done (green #009E73) is at the bottom and Backlog at the top. stages = [ - ("Backlog", backlog_band, OKABE_ITO[4]), - ("Analysis", analysis_band, OKABE_ITO[3]), - ("Development", dev_band, OKABE_ITO[2]), - ("Testing", testing_band, OKABE_ITO[1]), - ("Done", done_band, OKABE_ITO[0]), + ("Backlog", backlog_band, IMPRINT[4]), + ("Analysis", analysis_band, IMPRINT[3]), + ("Development", dev_band, IMPRINT[2]), + ("Testing", testing_band, IMPRINT[1]), + ("Done", done_band, IMPRINT[0]), ] for name, data, color in stages: diff --git a/plots/area-stacked-percent/implementations/python/highcharts.py b/plots/area-stacked-percent/implementations/python/highcharts.py index 7a0c74fe0a..43c1f0a224 100644 --- a/plots/area-stacked-percent/implementations/python/highcharts.py +++ b/plots/area-stacked-percent/implementations/python/highcharts.py @@ -26,7 +26,7 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" # Okabe-Ito palette -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3"] # Data - Market share evolution over time (2018-2025) years = ["2018", "2019", "2020", "2021", "2022", "2023", "2024", "2025"] @@ -115,25 +115,25 @@ } # Color palette - Okabe-Ito -chart.options.colors = OKABE_ITO +chart.options.colors = IMPRINT # Add series series_a = AreaSeries() series_a.name = "Product A" series_a.data = product_a -series_a.color = OKABE_ITO[0] +series_a.color = IMPRINT[0] chart.add_series(series_a) series_b = AreaSeries() series_b.name = "Product B" series_b.data = product_b -series_b.color = OKABE_ITO[1] +series_b.color = IMPRINT[1] chart.add_series(series_b) series_c = AreaSeries() series_c.name = "Product C" series_c.data = product_c -series_c.color = OKABE_ITO[2] +series_c.color = IMPRINT[2] chart.add_series(series_c) # Download Highcharts JS for inline embedding diff --git a/plots/area-stacked/implementations/python/highcharts.py b/plots/area-stacked/implementations/python/highcharts.py index e861b9f0d2..9bc9b2621e 100644 --- a/plots/area-stacked/implementations/python/highcharts.py +++ b/plots/area-stacked/implementations/python/highcharts.py @@ -26,7 +26,7 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" # Okabe-Ito palette: first series always #009E73 -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233"] # Data: Monthly revenue by product category (in thousands $) over 2 years months = [ @@ -196,7 +196,7 @@ } # Set Okabe-Ito colors -chart.options.colors = OKABE_ITO +chart.options.colors = IMPRINT # Add series (ordered by average size, largest first per spec) series_data = [ diff --git a/plots/bar-3d-categorical/implementations/python/highcharts.py b/plots/bar-3d-categorical/implementations/python/highcharts.py index 28abc33d8d..13c8fd6436 100644 --- a/plots/bar-3d-categorical/implementations/python/highcharts.py +++ b/plots/bar-3d-categorical/implementations/python/highcharts.py @@ -25,7 +25,7 @@ INK_SOFT = "#4A4A44" if THEME == "light" else "#B8B7B0" GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233"] # Data: quarterly revenue ($ thousands) for five product categories categories = ["Electronics", "Clothing", "Food", "Sports", "Books"] @@ -122,13 +122,13 @@ "layout": "vertical", } -chart.options.colors = OKABE_ITO +chart.options.colors = IMPRINT for i, quarter in enumerate(quarters): series = ColumnSeries() series.name = quarter series.data = sales_data[quarter] - series.color = OKABE_ITO[i] + series.color = IMPRINT[i] # Emphasize Q4 (peak quarter) with a prominent border to guide the viewer if quarter == "Q4": series.border_color = INK_SOFT diff --git a/plots/bar-diverging/implementations/python/highcharts.py b/plots/bar-diverging/implementations/python/highcharts.py index 764a33f59c..212656d629 100644 --- a/plots/bar-diverging/implementations/python/highcharts.py +++ b/plots/bar-diverging/implementations/python/highcharts.py @@ -27,7 +27,7 @@ # Okabe-Ito palette POSITIVE = "#009E73" # bluish green (brand, position 1) -NEGATIVE = "#D55E00" # vermillion (position 2) +NEGATIVE = "#AE3030" # imprint red — negative # Data - Customer satisfaction survey results by department categories = [ diff --git a/plots/bar-drilldown/implementations/python/highcharts.py b/plots/bar-drilldown/implementations/python/highcharts.py index 3f50cc8bc5..0072c515d1 100644 --- a/plots/bar-drilldown/implementations/python/highcharts.py +++ b/plots/bar-drilldown/implementations/python/highcharts.py @@ -25,7 +25,7 @@ INK_SOFT = "#4A4A44" if THEME == "light" else "#B8B7B0" GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7", "#E69F00", "#56B4E9", "#F0E442"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233", "#AE3030", "#2ABCCD", "#954477"] # Download Highcharts JS and drilldown module (inline required for headless Chrome) highcharts_url = "https://unpkg.com/highcharts/highcharts.js" @@ -78,7 +78,7 @@ chart.options.legend = {"enabled": False} chart.options.credits = {"enabled": False} -chart.options.colors = OKABE_ITO +chart.options.colors = IMPRINT chart.options.tooltip = { "headerFormat": '{series.name}
', diff --git a/plots/bar-grouped/implementations/python/highcharts.py b/plots/bar-grouped/implementations/python/highcharts.py index 0134cbc1cb..c81892bc1e 100644 --- a/plots/bar-grouped/implementations/python/highcharts.py +++ b/plots/bar-grouped/implementations/python/highcharts.py @@ -26,7 +26,7 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" # Okabe-Ito palette - first series is always #009E73 -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7", "#E69F00", "#56B4E9", "#F0E442"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233", "#AE3030", "#2ABCCD", "#954477"] # Data - Quarterly revenue by product line (realistic business scenario) categories = ["Q1", "Q2", "Q3", "Q4"] @@ -122,7 +122,7 @@ series = ColumnSeries() series.name = product_name series.data = values - series.color = OKABE_ITO[i] + series.color = IMPRINT[i] chart.add_series(series) # Download Highcharts JS for inline embedding (required for headless Chrome) diff --git a/plots/bar-race-animated/implementations/python/highcharts.py b/plots/bar-race-animated/implementations/python/highcharts.py index fdb6e332d2..abeddcf46b 100644 --- a/plots/bar-race-animated/implementations/python/highcharts.py +++ b/plots/bar-race-animated/implementations/python/highcharts.py @@ -31,12 +31,12 @@ # Okabe-Ito palette (positions 1–7) + adaptive neutral for 8 entities OI_COLORS = [ "#009E73", # position 1: bluish green - "#D55E00", # position 2: vermillion - "#0072B2", # position 3: blue - "#CC79A7", # position 4: reddish purple - "#E69F00", # position 5: orange - "#56B4E9", # position 6: sky blue - "#F0E442", # position 7: yellow + "#C475FD", # position 2: vermillion + "#4467A3", # position 3: blue + "#BD8233", # position 4: reddish purple + "#AE3030", # position 5: orange + "#2ABCCD", # position 6: sky blue + "#954477", # position 7: yellow "#1A1A1A" if THEME == "light" else "#E8E8E0", # position 8: adaptive neutral ] diff --git a/plots/bar-spine/implementations/python/highcharts.py b/plots/bar-spine/implementations/python/highcharts.py index 611918839d..40fec94c80 100644 --- a/plots/bar-spine/implementations/python/highcharts.py +++ b/plots/bar-spine/implementations/python/highcharts.py @@ -26,7 +26,7 @@ INK_SOFT = "#4A4A44" if THEME == "light" else "#B8B7B0" GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233"] # Data: Annual customer satisfaction survey (n=5,000) across industry sectors sectors = ["Technology", "Healthcare", "Finance", "Retail", "Manufacturing"] @@ -162,7 +162,7 @@ } # Add one series per satisfaction rating (stacked bottom-to-top: best first) -for i, (rating, color) in enumerate(zip(ratings, OKABE_ITO, strict=True)): +for i, (rating, color) in enumerate(zip(ratings, IMPRINT, strict=True)): series = ColumnSeries() series.name = rating series.color = color diff --git a/plots/bar-stacked-percent/implementations/python/highcharts.py b/plots/bar-stacked-percent/implementations/python/highcharts.py index 96cf54ffbb..7e66cec0fb 100644 --- a/plots/bar-stacked-percent/implementations/python/highcharts.py +++ b/plots/bar-stacked-percent/implementations/python/highcharts.py @@ -32,7 +32,7 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" # Okabe-Ito palette - first series is always #009E73 -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7", "#E69F00"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233", "#AE3030"] # Data: Market share by quarter for different companies categories = ["Q1 2024", "Q2 2024", "Q3 2024", "Q4 2024", "Q1 2025"] @@ -127,7 +127,7 @@ series = ColumnSeries() series.name = name series.data = data - series.color = OKABE_ITO[i % len(OKABE_ITO)] + series.color = IMPRINT[i % len(IMPRINT)] chart.add_series(series) # Download Highcharts JS (required for headless Chrome) diff --git a/plots/bar-stacked/implementations/python/highcharts.py b/plots/bar-stacked/implementations/python/highcharts.py index 0a505e3056..bc074b8f5b 100644 --- a/plots/bar-stacked/implementations/python/highcharts.py +++ b/plots/bar-stacked/implementations/python/highcharts.py @@ -35,7 +35,7 @@ } # Okabe-Ito palette: first series is always #009E73 -colors = ["#009E73", "#D55E00", "#0072B2", "#CC79A7"] +colors = ["#009E73", "#C475FD", "#4467A3", "#BD8233"] # Create chart with container chart = Chart(container="container") diff --git a/plots/biplot-pca/implementations/python/highcharts.py b/plots/biplot-pca/implementations/python/highcharts.py index b5f7087921..8011c9639d 100644 --- a/plots/biplot-pca/implementations/python/highcharts.py +++ b/plots/biplot-pca/implementations/python/highcharts.py @@ -28,7 +28,7 @@ INK_SOFT = "#4A4A44" if THEME == "light" else "#B8B7B0" RULE = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" BRAND = "#009E73" # Okabe-Ito position 1 -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2"] # Positions 1-3 for species +IMPRINT = ["#009E73", "#C475FD", "#4467A3"] # Positions 1-3 for species # Data - Iris dataset for PCA np.random.seed(42) @@ -129,7 +129,7 @@ series = ScatterSeries() series.name = species.capitalize() series.data = [{"x": float(scores[j, 0]), "y": float(scores[j, 1])} for j in range(len(y)) if mask[j]] - series.color = OKABE_ITO[i] + series.color = IMPRINT[i] series.marker = {"radius": 8} chart.add_series(series) @@ -143,7 +143,7 @@ } # Set colors for chart-level consistency -chart.options.colors = OKABE_ITO +chart.options.colors = IMPRINT # Download Highcharts JS with retries and fallback CDN URLs cdn_urls = [ diff --git a/plots/box-grouped/implementations/python/highcharts.py b/plots/box-grouped/implementations/python/highcharts.py index 46a8441585..7e971cca45 100644 --- a/plots/box-grouped/implementations/python/highcharts.py +++ b/plots/box-grouped/implementations/python/highcharts.py @@ -28,7 +28,7 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" # Okabe-Ito palette -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3"] # Data - Employee performance scores by department and experience level np.random.seed(42) @@ -86,11 +86,11 @@ series = BoxPlotSeries() series.name = subcat series.data = box_data - series.color = OKABE_ITO[idx] - series.fill_color = OKABE_ITO[idx] + series.color = IMPRINT[idx] + series.fill_color = IMPRINT[idx] series.median_color = INK - series.stem_color = OKABE_ITO[idx] - series.whisker_color = OKABE_ITO[idx] + series.stem_color = IMPRINT[idx] + series.whisker_color = IMPRINT[idx] series_list.append(series) # Add outliers as scatter points if any exist @@ -98,7 +98,7 @@ scatter = ScatterSeries() scatter.name = f"{subcat} (outliers)" scatter.data = outliers_data - scatter.color = OKABE_ITO[idx] + scatter.color = IMPRINT[idx] scatter.marker = {"radius": 6} scatter.show_in_legend = False series_list.append(scatter) diff --git a/plots/box-notched/implementations/python/highcharts.py b/plots/box-notched/implementations/python/highcharts.py index 21e3a52a7c..631411715c 100644 --- a/plots/box-notched/implementations/python/highcharts.py +++ b/plots/box-notched/implementations/python/highcharts.py @@ -43,7 +43,7 @@ data_dict["Medium Dose"] = np.append(data_dict["Medium Dose"], [30, 95]) # Okabe-Ito palette - first series is always #009E73 -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233"] # Calculate box plot statistics inline (KISS - no functions) box_data = [] @@ -85,7 +85,7 @@ "median": round(median, 2), "q3": round(q3, 2), "high": round(upper_whisker, 2), - "color": OKABE_ITO[i], + "color": IMPRINT[i], } ) @@ -153,7 +153,7 @@ "medianWidth": 6, "medianColor": INK, "colorByPoint": True, - "colors": OKABE_ITO, + "colors": IMPRINT, }, "errorbar": {"lineWidth": 8, "whiskerLength": "40%", "color": INK, "stemWidth": 0}, }, @@ -185,7 +185,7 @@ "marker": { "symbol": "circle", "radius": 14, - "fillColor": OKABE_ITO[0], + "fillColor": IMPRINT[0], "lineColor": PAGE_BG, "lineWidth": 2, }, diff --git a/plots/boxen-basic/implementations/python/highcharts.py b/plots/boxen-basic/implementations/python/highcharts.py index f1cd6e18d9..4b8c5fb579 100644 --- a/plots/boxen-basic/implementations/python/highcharts.py +++ b/plots/boxen-basic/implementations/python/highcharts.py @@ -140,8 +140,8 @@ "name": "Median", "type": "scatter", "data": median_data, - "color": "#E69F00", - "marker": {"symbol": "diamond", "radius": 12, "fillColor": "#E69F00", "lineColor": colors[0], "lineWidth": 3}, + "color": "#AE3030", + "marker": {"symbol": "diamond", "radius": 12, "fillColor": "#AE3030", "lineColor": colors[0], "lineWidth": 3}, "zIndex": 10, } js_series.append(median_series) @@ -151,8 +151,8 @@ "name": "Outliers", "type": "scatter", "data": outlier_data, - "color": "#D55E00", - "marker": {"radius": 8, "symbol": "circle", "fillColor": "#D55E00", "lineColor": colors[0], "lineWidth": 2}, + "color": "#C475FD", + "marker": {"radius": 8, "symbol": "circle", "fillColor": "#C475FD", "lineColor": colors[0], "lineWidth": 2}, "tooltip": {"pointFormat": "Response time: {point.y:.1f} ms"}, } js_series.append(outlier_series) diff --git a/plots/bubble-map-geographic/implementations/python/highcharts.py b/plots/bubble-map-geographic/implementations/python/highcharts.py index af91273314..b65c494f53 100644 --- a/plots/bubble-map-geographic/implementations/python/highcharts.py +++ b/plots/bubble-map-geographic/implementations/python/highcharts.py @@ -26,10 +26,10 @@ # Okabe-Ito palette — continents in canonical order, first is always #009E73 CONTINENT_COLORS = { "Asia": "#009E73", - "Africa": "#D55E00", - "Europe": "#0072B2", - "Americas": "#CC79A7", - "Oceania": "#E69F00", + "Africa": "#C475FD", + "Europe": "#4467A3", + "Americas": "#BD8233", + "Oceania": "#AE3030", } # Data — major world cities, metropolitan population (millions) diff --git a/plots/candlestick-volume/implementations/python/highcharts.py b/plots/candlestick-volume/implementations/python/highcharts.py index cddedf6563..99f80cc974 100644 --- a/plots/candlestick-volume/implementations/python/highcharts.py +++ b/plots/candlestick-volume/implementations/python/highcharts.py @@ -82,8 +82,8 @@ volume_data = [] # Colorblind-friendly colors: blue for up, orange for down -UP_COLOR = "#0072B2" # Blue (Okabe-Ito position 3) -DOWN_COLOR = "#E69F00" # Orange (Okabe-Ito position 5) +UP_COLOR = "#4467A3" # Blue (Okabe-Ito position 3) +DOWN_COLOR = "#AE3030" # Orange (Okabe-Ito position 5) for i in range(n_days): ohlc_data.append( diff --git a/plots/cat-box-strip/implementations/python/highcharts.py b/plots/cat-box-strip/implementations/python/highcharts.py index 84ed46673e..d88fb47804 100644 --- a/plots/cat-box-strip/implementations/python/highcharts.py +++ b/plots/cat-box-strip/implementations/python/highcharts.py @@ -28,7 +28,7 @@ # Okabe-Ito palette BRAND = "#009E73" # Position 1 — always first series -OI_SECONDARY = "#D55E00" # Position 2 +OI_SECONDARY = "#C475FD" # Position 2 # Data - Plant growth measurements under different light conditions np.random.seed(42) diff --git a/plots/chernoff-basic/implementations/python/highcharts.py b/plots/chernoff-basic/implementations/python/highcharts.py index 046c7441c8..1efa85a29e 100644 --- a/plots/chernoff-basic/implementations/python/highcharts.py +++ b/plots/chernoff-basic/implementations/python/highcharts.py @@ -23,7 +23,7 @@ INK_SOFT = "#4A4A44" if THEME == "light" else "#B8B7B0" INK_MUTED = "#6B6A63" if THEME == "light" else "#A8A79F" -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3"] # Data np.random.seed(42) @@ -141,7 +141,7 @@ def create_face_svg(values, color, label, x_pos, y_pos, size=450): y_pos = cell_y + (cell_height - face_size - 60) // 2 species_idx = y_sample[idx] - color = OKABE_ITO[species_idx] + color = IMPRINT[species_idx] label = f"{species_names[species_idx]} #{(idx % 3) + 1}" faces_svg += create_face_svg(X_norm[idx], color, label, x_pos, y_pos, face_size) @@ -154,7 +154,7 @@ def create_face_svg(values, color, label, x_pos, y_pos, size=450): Species """ -for i, (species, color) in enumerate(zip(species_names, OKABE_ITO, strict=True)): +for i, (species, color) in enumerate(zip(species_names, IMPRINT, strict=True)): ly_item = legend_y + 130 + i * 80 legend_svg += f""" diff --git a/plots/circlepacking-basic/implementations/python/highcharts.py b/plots/circlepacking-basic/implementations/python/highcharts.py index 0f22bf748a..a96cb74200 100644 --- a/plots/circlepacking-basic/implementations/python/highcharts.py +++ b/plots/circlepacking-basic/implementations/python/highcharts.py @@ -24,14 +24,14 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" # Okabe-Ito palette -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7", "#E69F00", "#56B4E9", "#F0E442"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233", "#AE3030", "#2ABCCD", "#954477"] # Data: Company organizational structure across 3 hierarchy levels # Root (Company) -> Departments -> Teams -> Team Members (40+ nodes total) series_data = [ { "name": "Engineering", - "color": OKABE_ITO[0], + "color": IMPRINT[0], "data": [ {"name": "Frontend", "value": 8}, {"name": " - React Team", "value": 5}, @@ -49,7 +49,7 @@ }, { "name": "Product", - "color": OKABE_ITO[1], + "color": IMPRINT[1], "data": [ {"name": "Product Management", "value": 5}, {"name": " - Platform PM", "value": 2}, @@ -64,7 +64,7 @@ }, { "name": "Operations", - "color": OKABE_ITO[2], + "color": IMPRINT[2], "data": [ {"name": "Sales", "value": 9}, {"name": " - Enterprise", "value": 5}, diff --git a/plots/circos-basic/implementations/python/highcharts.py b/plots/circos-basic/implementations/python/highcharts.py index 41d6498b81..4c2fdfb3f8 100644 --- a/plots/circos-basic/implementations/python/highcharts.py +++ b/plots/circos-basic/implementations/python/highcharts.py @@ -24,7 +24,7 @@ INK_MUTED = "#6B6A63" if THEME == "light" else "#A8A79F" GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7", "#E69F00", "#56B4E9", "#F0E442"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233", "#AE3030", "#2ABCCD", "#954477"] # Data - Simulating trade flows between 8 chromosomes with expression tracks np.random.seed(42) @@ -56,7 +56,7 @@ connections.append([chromosomes[i], chromosomes[j], float(round(flow_matrix[i, j], 1))]) # Use Okabe-Ito palette for chromosomes (cycling through palette) -chr_colors = [OKABE_ITO[i % len(OKABE_ITO)] for i in range(n_chrs)] +chr_colors = [IMPRINT[i % len(IMPRINT)] for i in range(n_chrs)] # Create nodes with colors nodes = [{"id": chromosomes[i], "color": chr_colors[i]} for i in range(n_chrs)] @@ -105,7 +105,7 @@ "title": {"text": "Chromosomes", "style": {"fontSize": "28px", "fontWeight": "bold", "color": INK}}, }, "plotOptions": {"dependencywheel": {"showInLegend": False}, "pie": {"showInLegend": False}}, - "colors": OKABE_ITO, + "colors": IMPRINT, "series": [ { "type": "dependencywheel", diff --git a/plots/contour-decision-boundary/implementations/python/highcharts.py b/plots/contour-decision-boundary/implementations/python/highcharts.py index 67cd51db54..5aa00f6f65 100644 --- a/plots/contour-decision-boundary/implementations/python/highcharts.py +++ b/plots/contour-decision-boundary/implementations/python/highcharts.py @@ -26,7 +26,7 @@ # Okabe-Ito palette BRAND = "#009E73" # Position 1 - always first series -SERIES_2 = "#D55E00" +SERIES_2 = "#C475FD" # Data: Generate moon-shaped classification dataset np.random.seed(42) diff --git a/plots/dashboard-synchronized-crosshair/implementations/python/highcharts.py b/plots/dashboard-synchronized-crosshair/implementations/python/highcharts.py index f688bed934..011a80f862 100644 --- a/plots/dashboard-synchronized-crosshair/implementations/python/highcharts.py +++ b/plots/dashboard-synchronized-crosshair/implementations/python/highcharts.py @@ -27,8 +27,8 @@ # anyplot palette COLOR_PRICE = "#009E73" # position 1 — brand green -COLOR_VOLUME = "#9418DB" # position 2 -COLOR_RSI = "#B71D27" # position 3 +COLOR_VOLUME = "#C475FD" # position 2 +COLOR_RSI = "#AE3030" # position 3 # Data — stock-like price, volume, RSI over 150 trading days np.random.seed(42) @@ -257,7 +257,7 @@ }}, {{ from: 70, to: 100, - color: 'rgba(183,29,39,0.10)', + color: 'rgba(174, 48, 48, 0.10)', label: {{ text: 'Overbought', style: {{ fontSize: '40px', color: '{COLOR_RSI}' }} diff --git a/plots/dendrogram-radial/implementations/python/highcharts.py b/plots/dendrogram-radial/implementations/python/highcharts.py index 17900ebab7..95f71aaa29 100644 --- a/plots/dendrogram-radial/implementations/python/highcharts.py +++ b/plots/dendrogram-radial/implementations/python/highcharts.py @@ -24,7 +24,7 @@ ELEVATED_BG = "#FFFDF6" if THEME == "light" else "#242420" INK = "#1A1A17" if THEME == "light" else "#F0EFE8" INK_SOFT = "#4A4A44" if THEME == "light" else "#B8B7B0" -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7", "#E69F00"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233", "#AE3030"] # Data: simulated gene expression clustering (40 genes, 5 functional groups) np.random.seed(42) @@ -80,7 +80,7 @@ def get_merge_cluster(x_left, x_right): def cluster_color(cl): - return OKABE_ITO[cl - 1] if cl > 0 else INK_SOFT + return IMPRINT[cl - 1] if cl > 0 else INK_SOFT # Build Cartesian line segments grouped by cluster (0=neutral, 1-5=clusters) @@ -119,7 +119,7 @@ def cluster_color(cl): a = to_angle_rad(5 + 10 * i) cl = int(cluster_ids[leaf_idx]) x, y = p2c(a, max_d * 0.995) - leaf_data.append({"x": round(x, 5), "y": round(y, 5), "color": OKABE_ITO[cl - 1]}) + leaf_data.append({"x": round(x, 5), "y": round(y, 5), "color": IMPRINT[cl - 1]}) cluster_names = ["Cross-cluster", "Cluster A", "Cluster B", "Cluster C", "Cluster D", "Cluster E"] diff --git a/plots/density-rug/implementations/python/highcharts.py b/plots/density-rug/implementations/python/highcharts.py index c088b7f9c1..e7049da35e 100644 --- a/plots/density-rug/implementations/python/highcharts.py +++ b/plots/density-rug/implementations/python/highcharts.py @@ -120,8 +120,8 @@ rug_series = ScatterSeries() rug_series.name = "Rug (Individual Points)" rug_series.data = [[float(v), rug_y_position] for v in values] -rug_series.color = "#D55E00" # Okabe-Ito position 2 -rug_series.marker = {"symbol": "diamond", "radius": 8, "fillColor": "#D55E00", "lineWidth": 1, "lineColor": INK_SOFT} +rug_series.color = "#C475FD" # Okabe-Ito position 2 +rug_series.marker = {"symbol": "diamond", "radius": 8, "fillColor": "#C475FD", "lineWidth": 1, "lineColor": INK_SOFT} chart.add_series(rug_series) diff --git a/plots/diagnostic-regression-panel/implementations/python/highcharts.py b/plots/diagnostic-regression-panel/implementations/python/highcharts.py index 76c1d7e071..f86a72c133 100644 --- a/plots/diagnostic-regression-panel/implementations/python/highcharts.py +++ b/plots/diagnostic-regression-panel/implementations/python/highcharts.py @@ -26,8 +26,8 @@ INK_SOFT = "#4A4A44" if THEME == "light" else "#B8B7B0" GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" BRAND = "#009E73" -SMOOTHER = "#D55E00" -COOK_COLOR = "#CC79A7" +SMOOTHER = "#C475FD" +COOK_COLOR = "#BD8233" # Data — OLS regression with injected influential observations np.random.seed(42) diff --git a/plots/donut-basic/implementations/python/highcharts.py b/plots/donut-basic/implementations/python/highcharts.py index 8b0a44757d..7ffb70336f 100644 --- a/plots/donut-basic/implementations/python/highcharts.py +++ b/plots/donut-basic/implementations/python/highcharts.py @@ -24,7 +24,7 @@ INK_SOFT = "#4A4A44" if THEME == "light" else "#B8B7B0" # Okabe-Ito palette (first segment is always brand green) -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7", "#E69F00"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233", "#AE3030"] # Data - Annual budget allocation by department (USD thousands) categories = ["Engineering", "Operations", "Marketing", "Sales", "Support"] @@ -61,7 +61,7 @@ "y": 0, } -chart.options.colors = OKABE_ITO +chart.options.colors = IMPRINT chart.options.plot_options = { "pie": { diff --git a/plots/donut-nested/implementations/python/highcharts.py b/plots/donut-nested/implementations/python/highcharts.py index 6e18230302..e3fb3e75bf 100644 --- a/plots/donut-nested/implementations/python/highcharts.py +++ b/plots/donut-nested/implementations/python/highcharts.py @@ -26,12 +26,12 @@ INK_SOFT = "#4A4A44" if THEME == "light" else "#B8B7B0" # Okabe-Ito palette - first series is always #009E73 (brand green) -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233"] # Data - Budget allocation: departments (inner) and expense categories (outer) departments = ["Engineering", "Marketing", "Operations", "Sales"] dept_values = [4500000, 2800000, 1900000, 2200000] -dept_colors = OKABE_ITO +dept_colors = IMPRINT # Outer ring: Expense categories with color variants per department expenses = [ @@ -41,16 +41,16 @@ {"name": "Training", "y": 450000, "color": "#38D4A3"}, {"name": "Software", "y": 350000, "color": "#50EEB2"}, # Marketing (vermillion family - Okabe-Ito position 2 variants) - {"name": "Advertising", "y": 1400000, "color": "#D55E00"}, + {"name": "Advertising", "y": 1400000, "color": "#C475FD"}, {"name": "Events", "y": 700000, "color": "#E1791D"}, {"name": "Content", "y": 400000, "color": "#ED9439"}, {"name": "Research", "y": 300000, "color": "#F9AF56"}, # Operations (blue family - Okabe-Ito position 3 variants) - {"name": "Facilities", "y": 800000, "color": "#0072B2"}, + {"name": "Facilities", "y": 800000, "color": "#4467A3"}, {"name": "IT Support", "y": 600000, "color": "#2287CC"}, {"name": "Logistics", "y": 500000, "color": "#449CE6"}, # Sales (reddish purple family - Okabe-Ito position 4 variants) - {"name": "Commissions", "y": 1100000, "color": "#CC79A7"}, + {"name": "Commissions", "y": 1100000, "color": "#BD8233"}, {"name": "Travel", "y": 600000, "color": "#DB8FBB"}, {"name": "Client Entertainment", "y": 300000, "color": "#EAA5CF"}, {"name": "CRM Tools", "y": 200000, "color": "#F9BBE3"}, diff --git a/plots/dot-matrix-proportional/implementations/python/highcharts.py b/plots/dot-matrix-proportional/implementations/python/highcharts.py index 7ef55c9b1c..95cd62c2dc 100644 --- a/plots/dot-matrix-proportional/implementations/python/highcharts.py +++ b/plots/dot-matrix-proportional/implementations/python/highcharts.py @@ -25,7 +25,7 @@ INK_SOFT = "#4A4A44" if THEME == "light" else "#B8B7B0" GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233"] # Data — Tech Survey: Preferred Code Editor (100 developers) categories = [ @@ -112,7 +112,7 @@ "scatter": {"marker": {"radius": 85, "symbol": "circle", "lineWidth": 0}, "enableMouseTracking": False} } chart.options.tooltip = {"enabled": False} -chart.options.colors = OKABE_ITO +chart.options.colors = IMPRINT chart.options.credits = {"enabled": False} # Include percentage in each legend entry per spec note on count/percentage annotations diff --git a/plots/drawdown-basic/implementations/python/highcharts.py b/plots/drawdown-basic/implementations/python/highcharts.py index cfef5e6b98..d02ed7de93 100644 --- a/plots/drawdown-basic/implementations/python/highcharts.py +++ b/plots/drawdown-basic/implementations/python/highcharts.py @@ -28,7 +28,7 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" # Drawdown uses red — semantic exception (loss/down) → anyplot palette position 3 -DRAWDOWN_COLOR = "#B71D27" +DRAWDOWN_COLOR = "#AE3030" # Data — simulated portfolio (geometric Brownian motion) np.random.seed(42) @@ -167,7 +167,7 @@ "color": DRAWDOWN_COLOR, "fillColor": { "linearGradient": {"x1": 0, "y1": 0, "x2": 0, "y2": 1}, - "stops": [[0, "rgba(183, 29, 39, 0.05)"], [1, "rgba(183, 29, 39, 0.55)"]], + "stops": [[0, "rgba(174, 48, 48, 0.05)"], [1, "rgba(174, 48, 48, 0.55)"]], }, "lineColor": DRAWDOWN_COLOR, "lineWidth": 4, diff --git a/plots/dumbbell-basic/implementations/python/highcharts.py b/plots/dumbbell-basic/implementations/python/highcharts.py index 8a01f5396a..1e96285032 100644 --- a/plots/dumbbell-basic/implementations/python/highcharts.py +++ b/plots/dumbbell-basic/implementations/python/highcharts.py @@ -26,7 +26,7 @@ CONNECTOR = "rgba(26,26,23,0.40)" if THEME == "light" else "rgba(240,239,232,0.40)" BEFORE_COLOR = "#009E73" # Okabe-Ito 1 — brand -AFTER_COLOR = "#D55E00" # Okabe-Ito 2 +AFTER_COLOR = "#C475FD" # Okabe-Ito 2 # Employee satisfaction scores (0-100) before and after policy changes. # Mix of strong gains, modest gains, and two declines for full coverage. diff --git a/plots/elbow-curve/implementations/python/highcharts.py b/plots/elbow-curve/implementations/python/highcharts.py index 81d8d1d66a..375226022f 100644 --- a/plots/elbow-curve/implementations/python/highcharts.py +++ b/plots/elbow-curve/implementations/python/highcharts.py @@ -28,7 +28,7 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" BRAND = "#009E73" # Okabe-Ito position 1 -SECONDARY = "#D55E00" # Okabe-Ito position 2 +SECONDARY = "#C475FD" # Okabe-Ito position 2 # Data - simulate elbow curve from K-means clustering np.random.seed(42) diff --git a/plots/errorbar-asymmetric/implementations/python/highcharts.py b/plots/errorbar-asymmetric/implementations/python/highcharts.py index 7eea4eceed..4b95192126 100644 --- a/plots/errorbar-asymmetric/implementations/python/highcharts.py +++ b/plots/errorbar-asymmetric/implementations/python/highcharts.py @@ -27,7 +27,7 @@ # Okabe-Ito palette BRAND = "#009E73" # Position 1 - first categorical series -SECONDARY = "#D55E00" # Position 2 +SECONDARY = "#C475FD" # Position 2 # Data - Quarterly sales forecast with asymmetric confidence intervals np.random.seed(42) diff --git a/plots/facet-grid/implementations/python/highcharts.py b/plots/facet-grid/implementations/python/highcharts.py index 7a7040e2d3..1d4fabb03e 100644 --- a/plots/facet-grid/implementations/python/highcharts.py +++ b/plots/facet-grid/implementations/python/highcharts.py @@ -26,7 +26,7 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" # Okabe-Ito palette for soil types -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3"] # Data np.random.seed(42) @@ -149,7 +149,7 @@ "marker": { "radius": 12, "symbol": "circle", - "fillColor": OKABE_ITO[row_idx % len(OKABE_ITO)], + "fillColor": IMPRINT[row_idx % len(IMPRINT)], "lineWidth": 2, "lineColor": PAGE_BG, }, diff --git a/plots/flowmap-origin-destination/implementations/python/highcharts.py b/plots/flowmap-origin-destination/implementations/python/highcharts.py index 298505a3eb..e936ea57d4 100644 --- a/plots/flowmap-origin-destination/implementations/python/highcharts.py +++ b/plots/flowmap-origin-destination/implementations/python/highcharts.py @@ -170,7 +170,7 @@ "color": BRAND, "fillColor": { "linearGradient": {"x1": 0, "y1": 0, "x2": 1, "y2": 0}, - "stops": [[0, "rgba(0, 158, 115, 0.60)"], [1, "rgba(0, 114, 178, 0.60)"]], + "stops": [[0, "rgba(0, 158, 115, 0.60)"], [1, "rgba(68, 103, 163, 0.60)"]], }, }, ], diff --git a/plots/forest-basic/implementations/python/highcharts.py b/plots/forest-basic/implementations/python/highcharts.py index c949abfd53..0e5625a0f1 100644 --- a/plots/forest-basic/implementations/python/highcharts.py +++ b/plots/forest-basic/implementations/python/highcharts.py @@ -29,7 +29,7 @@ INK_SOFT = "#4A4A44" if THEME == "light" else "#B8B7B0" GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" BRAND = "#009E73" -SECONDARY = "#D55E00" +SECONDARY = "#C475FD" # Data: Meta-analysis of treatment effect studies (mean difference) studies = [ diff --git a/plots/frequency-polygon-basic/implementations/python/highcharts.py b/plots/frequency-polygon-basic/implementations/python/highcharts.py index 3b5e82a1b5..c2e21dfdf3 100644 --- a/plots/frequency-polygon-basic/implementations/python/highcharts.py +++ b/plots/frequency-polygon-basic/implementations/python/highcharts.py @@ -27,7 +27,7 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" # Okabe-Ito palette (first series is always #009E73) -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7", "#E69F00", "#56B4E9"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233", "#AE3030", "#2ABCCD"] # Data - Test scores for three different classes np.random.seed(42) @@ -127,23 +127,23 @@ series_a = SplineSeries() series_a.name = "Class A (Avg: 72)" series_a.data = [[float(x), int(y)] for x, y in zip(extended_centers, freq_a_extended, strict=True)] -series_a.color = OKABE_ITO[0] # #009E73 - brand green -series_a.fill_color = OKABE_ITO[0] -series_a.marker = {"fillColor": OKABE_ITO[0], "lineWidth": 2, "lineColor": PAGE_BG} +series_a.color = IMPRINT[0] # #009E73 - brand green +series_a.fill_color = IMPRINT[0] +series_a.marker = {"fillColor": IMPRINT[0], "lineWidth": 2, "lineColor": PAGE_BG} series_b = SplineSeries() series_b.name = "Class B (Avg: 80)" series_b.data = [[float(x), int(y)] for x, y in zip(extended_centers, freq_b_extended, strict=True)] -series_b.color = OKABE_ITO[1] # #D55E00 - vermillion -series_b.fill_color = OKABE_ITO[1] -series_b.marker = {"fillColor": OKABE_ITO[1], "lineWidth": 2, "lineColor": PAGE_BG} +series_b.color = IMPRINT[1] # #C475FD - vermillion +series_b.fill_color = IMPRINT[1] +series_b.marker = {"fillColor": IMPRINT[1], "lineWidth": 2, "lineColor": PAGE_BG} series_c = SplineSeries() series_c.name = "Class C (Bimodal)" series_c.data = [[float(x), int(y)] for x, y in zip(extended_centers, freq_c_extended, strict=True)] -series_c.color = OKABE_ITO[2] # #0072B2 - blue -series_c.fill_color = OKABE_ITO[2] -series_c.marker = {"fillColor": OKABE_ITO[2], "lineWidth": 2, "lineColor": PAGE_BG} +series_c.color = IMPRINT[2] # #4467A3 - blue +series_c.fill_color = IMPRINT[2] +series_c.marker = {"fillColor": IMPRINT[2], "lineWidth": 2, "lineColor": PAGE_BG} # Add series to chart chart.add_series(series_a) diff --git a/plots/frontier-efficient/implementations/python/highcharts.py b/plots/frontier-efficient/implementations/python/highcharts.py index afd2e52ee7..e4918c8600 100644 --- a/plots/frontier-efficient/implementations/python/highcharts.py +++ b/plots/frontier-efficient/implementations/python/highcharts.py @@ -29,7 +29,7 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" # Okabe-Ito palette -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7", "#E69F00", "#56B4E9", "#F0E442"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233", "#AE3030", "#2ABCCD", "#954477"] # Data - Generate random portfolios and efficient frontier np.random.seed(42) @@ -189,21 +189,21 @@ low_sharpe_series = ScatterSeries() low_sharpe_series.data = low_sharpe low_sharpe_series.name = "Low Sharpe Ratio" -low_sharpe_series.color = OKABE_ITO[1] +low_sharpe_series.color = IMPRINT[1] low_sharpe_series.marker = {"symbol": "circle", "radius": 8} chart.add_series(low_sharpe_series) mid_sharpe_series = ScatterSeries() mid_sharpe_series.data = mid_sharpe mid_sharpe_series.name = "Medium Sharpe Ratio" -mid_sharpe_series.color = OKABE_ITO[2] +mid_sharpe_series.color = IMPRINT[2] mid_sharpe_series.marker = {"symbol": "circle", "radius": 8} chart.add_series(mid_sharpe_series) high_sharpe_series = ScatterSeries() high_sharpe_series.data = high_sharpe high_sharpe_series.name = "High Sharpe Ratio" -high_sharpe_series.color = OKABE_ITO[0] +high_sharpe_series.color = IMPRINT[0] high_sharpe_series.marker = {"symbol": "circle", "radius": 8} chart.add_series(high_sharpe_series) @@ -214,7 +214,7 @@ frontier_series = LineSeries() frontier_series.data = frontier_data frontier_series.name = "Efficient Frontier" -frontier_series.color = OKABE_ITO[3] +frontier_series.color = IMPRINT[3] frontier_series.line_width = 8 frontier_series.marker = {"enabled": False} frontier_series.z_index = 5 @@ -224,7 +224,7 @@ min_var_series = ScatterSeries() min_var_series.data = [{"x": round(min_var_risk * 100, 2), "y": round(min_var_return * 100, 2)}] min_var_series.name = "Minimum Variance" -min_var_series.color = OKABE_ITO[4] +min_var_series.color = IMPRINT[4] min_var_series.marker = {"symbol": "square", "radius": 14, "lineWidth": 3, "lineColor": INK} min_var_series.z_index = 10 chart.add_series(min_var_series) @@ -233,7 +233,7 @@ tangency_series = ScatterSeries() tangency_series.data = [{"x": round(tangency_risk * 100, 2), "y": round(tangency_return * 100, 2)}] tangency_series.name = "Maximum Sharpe Ratio" -tangency_series.color = OKABE_ITO[5] +tangency_series.color = IMPRINT[5] tangency_series.marker = {"symbol": "triangle", "radius": 16, "lineWidth": 3, "lineColor": INK} tangency_series.z_index = 10 chart.add_series(tangency_series) @@ -248,7 +248,7 @@ cml_series = LineSeries() cml_series.data = cml_data cml_series.name = "Capital Market Line" -cml_series.color = OKABE_ITO[6] +cml_series.color = IMPRINT[6] cml_series.dash_style = "Dash" cml_series.line_width = 5 cml_series.marker = {"enabled": False} diff --git a/plots/funnel-basic/implementations/python/highcharts.py b/plots/funnel-basic/implementations/python/highcharts.py index 732f8b2771..70ed8fdc51 100644 --- a/plots/funnel-basic/implementations/python/highcharts.py +++ b/plots/funnel-basic/implementations/python/highcharts.py @@ -24,14 +24,14 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" # Okabe-Ito categorical palette (first series is always #009E73) -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7", "#E69F00"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233", "#AE3030"] # Sales funnel: visitors progressing from initial awareness through purchase. stages = ["Awareness", "Interest", "Consideration", "Intent", "Purchase"] values = [1000, 600, 400, 200, 100] funnel_data = [ - {"name": stage, "y": value, "color": OKABE_ITO[i]} + {"name": stage, "y": value, "color": IMPRINT[i]} for i, (stage, value) in enumerate(zip(stages, values, strict=True)) ] diff --git a/plots/gain-curve/implementations/python/highcharts.py b/plots/gain-curve/implementations/python/highcharts.py index 90376da2a8..c232f72738 100644 --- a/plots/gain-curve/implementations/python/highcharts.py +++ b/plots/gain-curve/implementations/python/highcharts.py @@ -28,7 +28,7 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" BRAND = "#009E73" # Okabe-Ito position 1 -ACCENT = "#D55E00" # Okabe-Ito position 2 for baseline +ACCENT = "#C475FD" # Okabe-Ito position 2 for baseline # Data: Customer response model with predicted probabilities np.random.seed(42) diff --git a/plots/gantt-basic/implementations/python/highcharts.py b/plots/gantt-basic/implementations/python/highcharts.py index cd7a2871fa..de73c1a77e 100644 --- a/plots/gantt-basic/implementations/python/highcharts.py +++ b/plots/gantt-basic/implementations/python/highcharts.py @@ -24,7 +24,7 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" # Okabe-Ito palette -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7", "#E69F00", "#56B4E9", "#F0E442"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233", "#AE3030", "#2ABCCD", "#954477"] # Data - Project tasks with start/end dates and categories tasks = [ @@ -49,10 +49,10 @@ # Map categories to Okabe-Ito colors category_colors = { - "Planning": OKABE_ITO[0], # #009E73 - "Development": OKABE_ITO[1], # #D55E00 - "Testing": OKABE_ITO[2], # #0072B2 - "Deployment": OKABE_ITO[3], # #CC79A7 + "Planning": IMPRINT[0], # #009E73 + "Development": IMPRINT[1], # #C475FD + "Testing": IMPRINT[2], # #4467A3 + "Deployment": IMPRINT[3], # #BD8233 } task_names = [t["name"] for t in tasks] @@ -120,7 +120,7 @@ marginLeft: 360, marginTop: 150, }}, - colors: ['{OKABE_ITO[0]}', '{OKABE_ITO[1]}', '{OKABE_ITO[2]}', '{OKABE_ITO[3]}'], + colors: ['{IMPRINT[0]}', '{IMPRINT[1]}', '{IMPRINT[2]}', '{IMPRINT[3]}'], title: {{ text: 'gantt-basic · highcharts · anyplot.ai', style: {{fontSize: '28px', fontWeight: 'bold', color: '{INK}'}}, @@ -199,22 +199,22 @@ {{ name: 'Planning', data: {str(series_data_planning)}, - color: '{OKABE_ITO[0]}' + color: '{IMPRINT[0]}' }}, {{ name: 'Development', data: {str(series_data_development)}, - color: '{OKABE_ITO[1]}' + color: '{IMPRINT[1]}' }}, {{ name: 'Testing', data: {str(series_data_testing)}, - color: '{OKABE_ITO[2]}' + color: '{IMPRINT[2]}' }}, {{ name: 'Deployment', data: {str(series_data_deployment)}, - color: '{OKABE_ITO[3]}' + color: '{IMPRINT[3]}' }} ], credits: {{enabled: false}} diff --git a/plots/gauge-basic/implementations/python/highcharts.py b/plots/gauge-basic/implementations/python/highcharts.py index 803f8b9d12..962cf02a24 100644 --- a/plots/gauge-basic/implementations/python/highcharts.py +++ b/plots/gauge-basic/implementations/python/highcharts.py @@ -23,10 +23,10 @@ INK_SOFT = "#4A4A44" if THEME == "light" else "#B8B7B0" GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" -# Okabe-Ito zones: low / mid / high (intuitive + colorblind-safe) -ZONE_LOW = "#D55E00" # vermillion (bad) -ZONE_MID = "#E69F00" # orange (warning) -ZONE_HIGH = "#009E73" # brand bluish green (good) +# imprint semantic anchors: low / mid / high (red / amber / green) +ZONE_LOW = "#AE3030" # imprint red — bad +ZONE_MID = "#DDCC77" # imprint amber — warning +ZONE_HIGH = "#009E73" # imprint green — good # Data value = 72 diff --git a/plots/hierarchy-toggle-view/implementations/python/highcharts.py b/plots/hierarchy-toggle-view/implementations/python/highcharts.py index c6a42e06fe..8025586867 100644 --- a/plots/hierarchy-toggle-view/implementations/python/highcharts.py +++ b/plots/hierarchy-toggle-view/implementations/python/highcharts.py @@ -23,7 +23,7 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" # Okabe-Ito palette for departments (positions 1-4) -DEPT_COLORS = {"engineering": "#009E73", "sales": "#D55E00", "operations": "#0072B2", "hr": "#CC79A7"} +DEPT_COLORS = {"engineering": "#009E73", "sales": "#C475FD", "operations": "#4467A3", "hr": "#BD8233"} # Hierarchical data: Company organizational structure # Format: [id, parent, label, value] diff --git a/plots/histogram-density/implementations/python/highcharts.py b/plots/histogram-density/implementations/python/highcharts.py index 19a870bd28..8081c5e246 100644 --- a/plots/histogram-density/implementations/python/highcharts.py +++ b/plots/histogram-density/implementations/python/highcharts.py @@ -29,7 +29,7 @@ INK_MUTED = "#6B6A63" if THEME == "light" else "#A8A79F" GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" BRAND = "#009E73" -OKABE_ITO = ["#009E73", "#D55E00"] +IMPRINT = ["#009E73", "#C475FD"] # Data - Generate right-skewed response time data np.random.seed(42) @@ -110,7 +110,7 @@ } # Colors -chart.options.colors = OKABE_ITO +chart.options.colors = IMPRINT # Add histogram series (using column chart) histogram_series = ColumnSeries() @@ -124,7 +124,7 @@ pdf_series = AreaSplineSeries() pdf_series.name = "Gamma PDF" pdf_series.data = [[float(x), float(y)] for x, y in zip(x_pdf, y_pdf, strict=True)] -pdf_series.color = "#D55E00" +pdf_series.color = "#C475FD" chart.add_series(pdf_series) diff --git a/plots/histogram-kde/implementations/python/highcharts.py b/plots/histogram-kde/implementations/python/highcharts.py index 6d0e3161f6..9dee2d0653 100644 --- a/plots/histogram-kde/implementations/python/highcharts.py +++ b/plots/histogram-kde/implementations/python/highcharts.py @@ -28,7 +28,7 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" BRAND = "#009E73" # Okabe-Ito position 1 -SECONDARY = "#D55E00" # Okabe-Ito position 2 +SECONDARY = "#C475FD" # Okabe-Ito position 2 # Data: Simulated stock returns with realistic distribution np.random.seed(42) diff --git a/plots/histogram-overlapping/implementations/python/highcharts.py b/plots/histogram-overlapping/implementations/python/highcharts.py index 5f89482fdf..db5f9ec785 100644 --- a/plots/histogram-overlapping/implementations/python/highcharts.py +++ b/plots/histogram-overlapping/implementations/python/highcharts.py @@ -26,7 +26,7 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" # Okabe-Ito palette -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3"] # Data - Employee performance scores by department np.random.seed(42) @@ -121,19 +121,19 @@ "type": "column", "name": "Engineering (n=150)", "data": eng_counts.tolist(), - "color": OKABE_ITO[0], + "color": IMPRINT[0], "opacity": 0.55, } ) # Sales (Okabe-Ito vermillion) - middle layer chart.add_series( - {"type": "column", "name": "Sales (n=150)", "data": sales_counts.tolist(), "color": OKABE_ITO[1], "opacity": 0.55} + {"type": "column", "name": "Sales (n=150)", "data": sales_counts.tolist(), "color": IMPRINT[1], "opacity": 0.55} ) # Marketing (Okabe-Ito blue) - back layer chart.add_series( - {"type": "column", "name": "Marketing (n=150)", "data": mkt_counts.tolist(), "color": OKABE_ITO[2], "opacity": 0.55} + {"type": "column", "name": "Marketing (n=150)", "data": mkt_counts.tolist(), "color": IMPRINT[2], "opacity": 0.55} ) # Tooltip diff --git a/plots/histogram-returns-distribution/implementations/python/highcharts.py b/plots/histogram-returns-distribution/implementations/python/highcharts.py index 793f85d753..53f3e88a88 100644 --- a/plots/histogram-returns-distribution/implementations/python/highcharts.py +++ b/plots/histogram-returns-distribution/implementations/python/highcharts.py @@ -31,8 +31,8 @@ # Okabe-Ito palette positions BRAND = "#009E73" # position 1 — main histogram bars -COLOR_2 = "#D55E00" # position 2 — tail regions -COLOR_3 = "#0072B2" # position 3 — normal distribution curve +COLOR_2 = "#C475FD" # position 2 — tail regions +COLOR_3 = "#4467A3" # position 3 — normal distribution curve # Data np.random.seed(42) diff --git a/plots/histogram-stacked/implementations/python/highcharts.py b/plots/histogram-stacked/implementations/python/highcharts.py index e738d7a86b..8246b19785 100644 --- a/plots/histogram-stacked/implementations/python/highcharts.py +++ b/plots/histogram-stacked/implementations/python/highcharts.py @@ -27,7 +27,7 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" # Okabe-Ito palette (first color always #009E73) -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3"] # Data: Generate three groups with different distributions np.random.seed(42) @@ -110,17 +110,17 @@ series_a = ColumnSeries() series_a.data = [int(c) for c in counts_a] series_a.name = "Group A" -series_a.color = OKABE_ITO[0] +series_a.color = IMPRINT[0] series_b = ColumnSeries() series_b.data = [int(c) for c in counts_b] series_b.name = "Group B" -series_b.color = OKABE_ITO[1] +series_b.color = IMPRINT[1] series_c = ColumnSeries() series_c.data = [int(c) for c in counts_c] series_c.name = "Group C" -series_c.color = OKABE_ITO[2] +series_c.color = IMPRINT[2] chart.add_series(series_a) chart.add_series(series_b) diff --git a/plots/hive-basic/implementations/python/highcharts.py b/plots/hive-basic/implementations/python/highcharts.py index a3295956e4..e315f28850 100644 --- a/plots/hive-basic/implementations/python/highcharts.py +++ b/plots/hive-basic/implementations/python/highcharts.py @@ -21,7 +21,7 @@ INK = "#1A1A17" if THEME == "light" else "#F0EFE8" INK_SOFT = "#4A4A44" if THEME == "light" else "#B8B7B0" -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3"] # Data: Software module dependency network # Nodes assigned to 3 axes by module type: Core, Utility, Interface (deterministic data) @@ -116,7 +116,7 @@ y1 = center_y + inner_radius * math.sin(angle) x2 = center_x + (outer_radius + 50) * math.cos(angle) y2 = center_y + (outer_radius + 50) * math.sin(angle) - color = OKABE_ITO[axis_idx] + color = IMPRINT[axis_idx] renderer_commands.append( f"chart.renderer.path(['M', {x1:.0f}, {y1:.0f}, 'L', {x2:.0f}, {y2:.0f}], null)" @@ -143,7 +143,7 @@ mid_y = (y1 + y2) / 2 ctrl_x = center_x + (mid_x - center_x) * 0.15 ctrl_y = center_y + (mid_y - center_y) * 0.15 - edge_color = OKABE_ITO[source["axis"]] + edge_color = IMPRINT[source["axis"]] stroke_width = 3 + weight * 2 renderer_commands.append( @@ -160,7 +160,7 @@ # Draw nodes as circles for node in nodes: x, y = node_coords[node["id"]] - color = OKABE_ITO[node["axis"]] + color = IMPRINT[node["axis"]] renderer_commands.append( f"chart.renderer.circle({x:.0f}, {y:.0f}, 32).attr({{fill: '{color}', stroke: '{PAGE_BG}', 'stroke-width': 5, zIndex: 10}}).add();" @@ -193,7 +193,7 @@ for i, label in enumerate(axis_labels): legend_items += f"""
-
+
{label}
""" legend_items += f""" diff --git a/plots/horizon-basic/implementations/python/highcharts.py b/plots/horizon-basic/implementations/python/highcharts.py index 2d1ddd5d5c..add798ec10 100644 --- a/plots/horizon-basic/implementations/python/highcharts.py +++ b/plots/horizon-basic/implementations/python/highcharts.py @@ -49,8 +49,8 @@ # Color scheme: Okabe-Ito green shades for positive, orange shades for negative # Positive: from light to dark shades of #009E73 (Okabe-Ito position 1) colors_pos = ["#6FD8C0", "#009E73", "#004A3A"] # Light to dark green -# Negative: from light to dark shades of #D55E00 (Okabe-Ito position 2) -colors_neg = ["#F4B3A0", "#D55E00", "#6B2F00"] # Light to dark orange +# Negative: from light to dark shades of imprint red +colors_neg = ["#E07070", "#AE3030", "#7A1F1F"] # imprint red ramp # Calculate global max for consistent band sizing all_values = np.concatenate([np.array(d["values"]) for d in data]) diff --git a/plots/ice-basic/implementations/python/highcharts.py b/plots/ice-basic/implementations/python/highcharts.py index c85eff4662..297c46abc1 100644 --- a/plots/ice-basic/implementations/python/highcharts.py +++ b/plots/ice-basic/implementations/python/highcharts.py @@ -28,7 +28,7 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" BRAND = "#009E73" # Okabe-Ito position 1 — ICE lines -PDP_COLOR = "#D55E00" # Okabe-Ito position 2 — PDP overlay +PDP_COLOR = "#C475FD" # Okabe-Ito position 2 — PDP overlay ICE_COLOR = "rgba(0,158,115,0.20)" # BRAND at 20% opacity # Data diff --git a/plots/icicle-basic/implementations/python/highcharts.py b/plots/icicle-basic/implementations/python/highcharts.py index 57cfa82ba1..d5fc07f88f 100644 --- a/plots/icicle-basic/implementations/python/highcharts.py +++ b/plots/icicle-basic/implementations/python/highcharts.py @@ -22,7 +22,7 @@ INK_SOFT = "#4A4A44" if THEME == "light" else "#B8B7B0" # Okabe-Ito palette for main categories -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233"] # Data - File system hierarchy with folders and files hierarchy = { @@ -42,7 +42,7 @@ } # Category colors from Okabe-Ito palette -cat_colors = {"src": OKABE_ITO[0], "docs": OKABE_ITO[1], "tests": OKABE_ITO[2], "assets": OKABE_ITO[3]} +cat_colors = {"src": IMPRINT[0], "docs": IMPRINT[1], "tests": IMPRINT[2], "assets": IMPRINT[3]} # Flatten hierarchy into list of nodes with calculated sizes all_nodes = [] @@ -93,7 +93,7 @@ for lv in sorted(level_groups.keys()): for parent, children in level_groups[lv].items(): top_cat = parent if parent in cat_colors else "src" - color = cat_colors.get(top_cat, OKABE_ITO[0]) + color = cat_colors.get(top_cat, IMPRINT[0]) total_val = sum(c["value"] for c in children) x_pos = 200 @@ -190,10 +190,10 @@ // Draw legend var cats = [ - {{ name: 'src', color: '{OKABE_ITO[0]}' }}, - {{ name: 'docs', color: '{OKABE_ITO[1]}' }}, - {{ name: 'tests', color: '{OKABE_ITO[2]}' }}, - {{ name: 'assets', color: '{OKABE_ITO[3]}' }} + {{ name: 'src', color: '{IMPRINT[0]}' }}, + {{ name: 'docs', color: '{IMPRINT[1]}' }}, + {{ name: 'tests', color: '{IMPRINT[2]}' }}, + {{ name: 'assets', color: '{IMPRINT[3]}' }} ]; var legendY = 2520; diff --git a/plots/indicator-bollinger/implementations/python/highcharts.py b/plots/indicator-bollinger/implementations/python/highcharts.py index 181d6f9924..0b6aea51c1 100644 --- a/plots/indicator-bollinger/implementations/python/highcharts.py +++ b/plots/indicator-bollinger/implementations/python/highcharts.py @@ -26,7 +26,7 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" # Okabe-Ito palette -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7", "#E69F00", "#56B4E9", "#F0E442"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233", "#AE3030", "#2ABCCD", "#954477"] # Data - Generate 120 days of stock price data with Bollinger Bands np.random.seed(42) @@ -205,13 +205,13 @@ }} }}, - colors: {json.dumps(OKABE_ITO)}, + colors: {json.dumps(IMPRINT)}, series: [{{ type: 'arearange', name: 'Bollinger Bands', data: {band_json}, - color: '{OKABE_ITO[2]}', + color: '{IMPRINT[2]}', fillOpacity: 0.2, lineWidth: 0, zIndex: 0, @@ -220,7 +220,7 @@ type: 'line', name: 'Upper Band (+2σ)', data: {upper_json}, - color: '{OKABE_ITO[2]}', + color: '{IMPRINT[2]}', lineWidth: 4, dashStyle: 'Dash', zIndex: 1 @@ -228,7 +228,7 @@ type: 'line', name: 'Lower Band (-2σ)', data: {lower_json}, - color: '{OKABE_ITO[2]}', + color: '{IMPRINT[2]}', lineWidth: 4, dashStyle: 'Dash', zIndex: 1 @@ -236,7 +236,7 @@ type: 'line', name: '20-Day SMA', data: {sma_json}, - color: '{OKABE_ITO[1]}', + color: '{IMPRINT[1]}', lineWidth: 5, dashStyle: 'Dot', zIndex: 2 @@ -244,7 +244,7 @@ type: 'line', name: 'Close Price', data: {close_json}, - color: '{OKABE_ITO[0]}', + color: '{IMPRINT[0]}', lineWidth: 6, zIndex: 3 }}] diff --git a/plots/indicator-ema/implementations/python/highcharts.py b/plots/indicator-ema/implementations/python/highcharts.py index 83c06d2958..1d845d7388 100644 --- a/plots/indicator-ema/implementations/python/highcharts.py +++ b/plots/indicator-ema/implementations/python/highcharts.py @@ -28,7 +28,7 @@ INK_SOFT = "#4A4A44" if THEME == "light" else "#B8B7B0" GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7", "#E69F00", "#56B4E9", "#F0E442"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233", "#AE3030", "#2ABCCD", "#954477"] # Data np.random.seed(42) @@ -127,7 +127,7 @@ price_series = LineSeries() price_series.name = "Close Price" price_series.data = [[t, round(p, 2)] for t, p in zip(timestamps, df["close"], strict=True)] -price_series.color = OKABE_ITO[0] +price_series.color = IMPRINT[0] price_series.line_width = 5 price_series.z_index = 3 chart.add_series(price_series) @@ -136,7 +136,7 @@ ema12_series = LineSeries() ema12_series.name = "EMA 12" ema12_series.data = [[t, round(e, 2)] for t, e in zip(timestamps, df["ema_12"], strict=True)] -ema12_series.color = OKABE_ITO[1] +ema12_series.color = IMPRINT[1] ema12_series.line_width = 3 ema12_series.z_index = 2 chart.add_series(ema12_series) @@ -145,7 +145,7 @@ ema26_series = LineSeries() ema26_series.name = "EMA 26" ema26_series.data = [[t, round(e, 2)] for t, e in zip(timestamps, df["ema_26"], strict=True)] -ema26_series.color = OKABE_ITO[2] +ema26_series.color = IMPRINT[2] ema26_series.line_width = 3 ema26_series.dash_style = "ShortDash" ema26_series.z_index = 1 @@ -155,7 +155,7 @@ crossover_series = ScatterSeries() crossover_series.name = "Crossover" crossover_series.data = [[t, round(e, 2)] for t, e in zip(crossover_timestamps, crossover_df["ema_12"], strict=True)] -crossover_series.color = OKABE_ITO[3] +crossover_series.color = IMPRINT[3] crossover_series.marker = {"symbol": "diamond", "radius": 14} crossover_series.z_index = 4 chart.add_series(crossover_series) diff --git a/plots/indicator-macd/implementations/python/highcharts.py b/plots/indicator-macd/implementations/python/highcharts.py index 60726e3d07..ffe55a0a13 100644 --- a/plots/indicator-macd/implementations/python/highcharts.py +++ b/plots/indicator-macd/implementations/python/highcharts.py @@ -27,7 +27,7 @@ # Okabe-Ito palette for lines MACD_COLOR = "#009E73" # Position 1 - brand -SIGNAL_COLOR = "#D55E00" # Position 2 - vermillion +SIGNAL_COLOR = "#BD8233" # imprint ochre — signal line (categorical contrast) HISTOGRAM_POS_COLOR = "#22C55E" # Green for positive histogram HISTOGRAM_NEG_COLOR = "#EF4444" # Red for negative histogram diff --git a/plots/indicator-sma/implementations/python/highcharts.py b/plots/indicator-sma/implementations/python/highcharts.py index 170d677823..51811a1625 100644 --- a/plots/indicator-sma/implementations/python/highcharts.py +++ b/plots/indicator-sma/implementations/python/highcharts.py @@ -29,9 +29,9 @@ # Okabe-Ito colors (canonical order) CLOSE_COLOR = "#009E73" # position 1 — brand green — close price -SMA20_COLOR = "#D55E00" # position 2 — vermillion — SMA 20 -SMA50_COLOR = "#0072B2" # position 3 — blue — SMA 50 -SMA200_COLOR = "#CC79A7" # position 4 — reddish purple — SMA 200 +SMA20_COLOR = "#C475FD" # position 2 — vermillion — SMA 20 +SMA50_COLOR = "#4467A3" # position 3 — blue — SMA 50 +SMA200_COLOR = "#BD8233" # position 4 — reddish purple — SMA 200 # Data: stock price with mean-reverting (Ornstein-Uhlenbeck) dynamics np.random.seed(42) diff --git a/plots/kagi-basic/implementations/python/highcharts.py b/plots/kagi-basic/implementations/python/highcharts.py index 9cc43ef9d7..7dfaede237 100644 --- a/plots/kagi-basic/implementations/python/highcharts.py +++ b/plots/kagi-basic/implementations/python/highcharts.py @@ -28,7 +28,7 @@ # Okabe-Ito palette YANG_COLOR = "#009E73" # Green (bullish) - first series -YIN_COLOR = "#D55E00" # Vermillion (bearish) - second series +YIN_COLOR = "#AE3030" # imprint red — bearish # Generate realistic stock price data np.random.seed(42) diff --git a/plots/learning-curve-basic/implementations/python/highcharts.py b/plots/learning-curve-basic/implementations/python/highcharts.py index 6593ceb3ba..88df4ae8c0 100644 --- a/plots/learning-curve-basic/implementations/python/highcharts.py +++ b/plots/learning-curve-basic/implementations/python/highcharts.py @@ -26,7 +26,7 @@ # Okabe-Ito palette BRAND = "#009E73" # Position 1 - first series -ORANGE = "#D55E00" # Position 2 +ORANGE = "#C475FD" # Position 2 # Data - Simulated learning curve from a classification model np.random.seed(42) diff --git a/plots/line-3d-trajectory/implementations/python/highcharts.py b/plots/line-3d-trajectory/implementations/python/highcharts.py index 2e8c1c113d..cdb14e4794 100644 --- a/plots/line-3d-trajectory/implementations/python/highcharts.py +++ b/plots/line-3d-trajectory/implementations/python/highcharts.py @@ -178,8 +178,8 @@ max: 1, stops: [ [0, '{BRAND}'], - [0.5, '#D55E00'], - [1, '#0072B2'] + [0.5, '#C475FD'], + [1, '#4467A3'] ], showInLegend: true }}, diff --git a/plots/line-annotated-events/implementations/python/highcharts.py b/plots/line-annotated-events/implementations/python/highcharts.py index 9f0c5b6604..5f5dd2b3d1 100644 --- a/plots/line-annotated-events/implementations/python/highcharts.py +++ b/plots/line-annotated-events/implementations/python/highcharts.py @@ -28,7 +28,7 @@ INK_SOFT = "#4A4A44" if THEME == "light" else "#B8B7B0" GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" BRAND = "#009E73" # Okabe-Ito position 1 — first series always -ACCENT = "#D55E00" # Okabe-Ito position 2 — event markers +ACCENT = "#C475FD" # Okabe-Ito position 2 — event markers # Data - Simulated daily product metrics over 6 months with event annotations np.random.seed(42) diff --git a/plots/line-loss-training/implementations/python/highcharts.py b/plots/line-loss-training/implementations/python/highcharts.py index ff0c1c7d28..ad62794a3d 100644 --- a/plots/line-loss-training/implementations/python/highcharts.py +++ b/plots/line-loss-training/implementations/python/highcharts.py @@ -28,7 +28,7 @@ # Okabe-Ito palette BRAND = "#009E73" # Training loss (first series) -SECONDARY = "#D55E00" # Validation loss +SECONDARY = "#C475FD" # Validation loss # Data - Simulate training and validation loss over epochs np.random.seed(42) diff --git a/plots/line-markers/implementations/python/highcharts.py b/plots/line-markers/implementations/python/highcharts.py index 3427d8ebe1..0f4a082e96 100644 --- a/plots/line-markers/implementations/python/highcharts.py +++ b/plots/line-markers/implementations/python/highcharts.py @@ -26,7 +26,7 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" # Okabe-Ito palette -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3"] # Data - Stock price tracking with different patterns np.random.seed(42) @@ -49,7 +49,7 @@ "spacingBottom": 50, "style": {"color": INK}, }, - "colors": OKABE_ITO, + "colors": IMPRINT, "title": {"text": "line-markers · highcharts · anyplot.ai", "style": {"fontSize": "28px", "color": INK}}, "xAxis": { "title": {"text": "Day", "style": {"fontSize": "22px", "color": INK}}, @@ -87,20 +87,20 @@ { "name": "Stock A", "data": [[int(d), round(float(p), 1)] for d, p in zip(days, stock_a, strict=False)], - "color": OKABE_ITO[0], - "marker": {"symbol": "circle", "fillColor": OKABE_ITO[0]}, + "color": IMPRINT[0], + "marker": {"symbol": "circle", "fillColor": IMPRINT[0]}, }, { "name": "Stock B", "data": [[int(d), round(float(p), 1)] for d, p in zip(days, stock_b, strict=False)], - "color": OKABE_ITO[1], - "marker": {"symbol": "diamond", "fillColor": OKABE_ITO[1]}, + "color": IMPRINT[1], + "marker": {"symbol": "diamond", "fillColor": IMPRINT[1]}, }, { "name": "Stock C", "data": [[int(d), round(float(p), 1)] for d, p in zip(days, stock_c, strict=False)], - "color": OKABE_ITO[2], - "marker": {"symbol": "triangle", "fillColor": OKABE_ITO[2]}, + "color": IMPRINT[2], + "marker": {"symbol": "triangle", "fillColor": IMPRINT[2]}, }, ], } diff --git a/plots/line-multi/implementations/python/highcharts.py b/plots/line-multi/implementations/python/highcharts.py index 026d6784d2..4593e23551 100644 --- a/plots/line-multi/implementations/python/highcharts.py +++ b/plots/line-multi/implementations/python/highcharts.py @@ -27,7 +27,7 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" # Okabe-Ito palette (first series always #009E73) -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233"] # Data - Monthly sales for 4 product lines over 12 months np.random.seed(42) @@ -114,34 +114,34 @@ } # Set colors for the chart -chart.options.colors = OKABE_ITO +chart.options.colors = IMPRINT # Add series - Electronics series1 = LineSeries() series1.name = "Electronics" series1.data = electronics -series1.color = OKABE_ITO[0] +series1.color = IMPRINT[0] chart.add_series(series1) # Add series - Clothing series2 = LineSeries() series2.name = "Clothing" series2.data = clothing -series2.color = OKABE_ITO[1] +series2.color = IMPRINT[1] chart.add_series(series2) # Add series - Home & Garden series3 = LineSeries() series3.name = "Home & Garden" series3.data = home_garden -series3.color = OKABE_ITO[2] +series3.color = IMPRINT[2] chart.add_series(series3) # Add series - Sports Equipment series4 = LineSeries() series4.name = "Sports Equipment" series4.data = sports -series4.color = OKABE_ITO[3] +series4.color = IMPRINT[3] chart.add_series(series4) # Download Highcharts JS for inline embedding diff --git a/plots/line-stock-comparison/implementations/python/highcharts.py b/plots/line-stock-comparison/implementations/python/highcharts.py index 89ef61262b..2d2ccbaef0 100644 --- a/plots/line-stock-comparison/implementations/python/highcharts.py +++ b/plots/line-stock-comparison/implementations/python/highcharts.py @@ -28,7 +28,7 @@ INK_SOFT = "#4A4A44" if THEME == "light" else "#B8B7B0" GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" -ANYPLOT_PALETTE = ["#009E73", "#9418DB", "#B71D27", "#16B8F3", "#99B314", "#D359A7", "#BA843E"] +IMPRINT = ["#009E73", "#C475FD", "#AE3030", "#4467A3", "#99B314", "#954477", "#BD8233"] # Data — synthetic semiconductor sector vs S&P 500, 2024 (252 trading days) np.random.seed(42) @@ -127,7 +127,7 @@ chart.options.plot_options = {"line": {"lineWidth": 3.5, "marker": {"enabled": False}}} -chart.options.colors = ANYPLOT_PALETTE +chart.options.colors = IMPRINT for symbol, price_data in prices.items(): series = LineSeries() diff --git a/plots/line-styled/implementations/python/highcharts.py b/plots/line-styled/implementations/python/highcharts.py index aa4576b235..a1d34a4060 100644 --- a/plots/line-styled/implementations/python/highcharts.py +++ b/plots/line-styled/implementations/python/highcharts.py @@ -26,7 +26,7 @@ INK_SOFT = "#4A4A44" if THEME == "light" else "#B8B7B0" GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" BRAND = "#009E73" # Okabe-Ito position 1 -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233"] # Data - Monthly temperature data for 4 cities np.random.seed(42) @@ -105,7 +105,7 @@ series1 = LineSeries() series1.name = "Madrid" series1.data = [round(float(v), 1) for v in madrid] -series1.color = OKABE_ITO[0] +series1.color = IMPRINT[0] series1.dash_style = "Solid" chart.add_series(series1) @@ -113,7 +113,7 @@ series2 = LineSeries() series2.name = "Berlin" series2.data = [round(float(v), 1) for v in berlin] -series2.color = OKABE_ITO[1] +series2.color = IMPRINT[1] series2.dash_style = "Dash" chart.add_series(series2) @@ -121,7 +121,7 @@ series3 = LineSeries() series3.name = "Edinburgh" series3.data = [round(float(v), 1) for v in edinburgh] -series3.color = OKABE_ITO[2] +series3.color = IMPRINT[2] series3.dash_style = "Dot" chart.add_series(series3) @@ -129,7 +129,7 @@ series4 = LineSeries() series4.name = "Oslo" series4.data = [round(float(v), 1) for v in oslo] -series4.color = OKABE_ITO[3] +series4.color = IMPRINT[3] series4.dash_style = "DashDot" chart.add_series(series4) diff --git a/plots/line-timeseries-rolling/implementations/python/highcharts.py b/plots/line-timeseries-rolling/implementations/python/highcharts.py index 7ea4157c34..04b382e1d3 100644 --- a/plots/line-timeseries-rolling/implementations/python/highcharts.py +++ b/plots/line-timeseries-rolling/implementations/python/highcharts.py @@ -27,7 +27,7 @@ # Okabe-Ito palette BRAND = "#009E73" # Position 1 -ACCENT = "#D55E00" # Position 2 +ACCENT = "#C475FD" # Position 2 BRAND_SEMI = "rgba(0, 158, 115, 0.5)" # Data - Daily temperature readings with 7-day rolling average diff --git a/plots/linked-views-selection/implementations/python/highcharts.py b/plots/linked-views-selection/implementations/python/highcharts.py index f0aecf405f..b142f343ad 100644 --- a/plots/linked-views-selection/implementations/python/highcharts.py +++ b/plots/linked-views-selection/implementations/python/highcharts.py @@ -26,7 +26,7 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" # Okabe-Ito palette (first series is ALWAYS #009E73) -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7", "#E69F00", "#56B4E9", "#F0E442"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233", "#AE3030", "#2ABCCD", "#954477"] # Load Iris dataset iris = load_iris() @@ -36,7 +36,7 @@ categories = [str(iris.target_names[t]) for t in iris.target] # Category colors from Okabe-Ito palette -category_colors = {"setosa": OKABE_ITO[0], "versicolor": OKABE_ITO[1], "virginica": OKABE_ITO[2]} +category_colors = {"setosa": IMPRINT[0], "versicolor": IMPRINT[1], "virginica": IMPRINT[2]} # Prepare data as JavaScript-friendly format data_points = [] @@ -113,7 +113,7 @@ .reset-btn {{ padding: 16px 48px; font-size: 24px; - background: {OKABE_ITO[0]}; + background: {IMPRINT[0]}; color: white; border: none; border-radius: 8px; @@ -151,9 +151,9 @@ // Data points const allData = {json.dumps(data_points)}; const categoryColors = {{ - "setosa": "{OKABE_ITO[0]}", - "versicolor": "{OKABE_ITO[1]}", - "virginica": "{OKABE_ITO[2]}" + "setosa": "{IMPRINT[0]}", + "versicolor": "{IMPRINT[1]}", + "virginica": "{IMPRINT[2]}" }}; const categoryList = ["setosa", "versicolor", "virginica"]; const pageColor = "{PAGE_BG}"; diff --git a/plots/logistic-regression/implementations/python/highcharts.py b/plots/logistic-regression/implementations/python/highcharts.py index 51dc98fb7c..901e9fee61 100644 --- a/plots/logistic-regression/implementations/python/highcharts.py +++ b/plots/logistic-regression/implementations/python/highcharts.py @@ -32,8 +32,8 @@ # Semantic color mapping: Pass→green (good), Fail→red (bad) COLOR_PASS = "#009E73" # anyplot position 1 — semantic: pass/good -COLOR_FAIL = "#B71D27" # anyplot position 3 — semantic: fail/bad -COLOR_CURVE = "#9418DB" # anyplot position 2 — logistic curve +COLOR_FAIL = "#AE3030" # anyplot position 3 — semantic: fail/bad +COLOR_CURVE = "#C475FD" # anyplot position 2 — logistic curve # Data — exam pass/fail as a function of study hours np.random.seed(42) @@ -185,7 +185,7 @@ scatter_fail = ScatterSeries() scatter_fail.data = [[x_fail[i], y_fail[i]] for i in range(len(x_fail))] scatter_fail.name = "Fail (0)" -scatter_fail.color = "rgba(183, 29, 39, 0.6)" # #B71D27 at 0.6 alpha +scatter_fail.color = "rgba(174, 48, 48, 0.6)" # #AE3030 at 0.6 alpha scatter_fail.marker = {"radius": 8, "symbol": "circle"} chart.add_series(scatter_fail) diff --git a/plots/lollipop-grouped/implementations/python/highcharts.py b/plots/lollipop-grouped/implementations/python/highcharts.py index 563e81f42f..77ae1e3c7d 100644 --- a/plots/lollipop-grouped/implementations/python/highcharts.py +++ b/plots/lollipop-grouped/implementations/python/highcharts.py @@ -28,7 +28,7 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" # Okabe-Ito palette (first series ALWAYS #009E73) -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3"] # Data - Quarterly revenue by product line across regions np.random.seed(42) @@ -106,7 +106,7 @@ n_series = len(series_names) offsets = [(i - (n_series - 1) / 2) * 0.2 for i in range(n_series)] -for series_name, color, offset in zip(series_names, OKABE_ITO, offsets, strict=True): +for series_name, color, offset in zip(series_names, IMPRINT, offsets, strict=True): values = data[series_name] # Create scatter points for the markers scatter_data = [] diff --git a/plots/manhattan-gwas/implementations/python/highcharts.py b/plots/manhattan-gwas/implementations/python/highcharts.py index 23b270cf33..20d840dc27 100644 --- a/plots/manhattan-gwas/implementations/python/highcharts.py +++ b/plots/manhattan-gwas/implementations/python/highcharts.py @@ -25,7 +25,7 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" # Okabe-Ito palette for alternating chromosomes -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7", "#E69F00", "#56B4E9", "#F0E442"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233", "#AE3030", "#2ABCCD", "#954477"] # Data - Simulated GWAS data with random p-values and significant peaks np.random.seed(42) @@ -99,8 +99,8 @@ for chrom in range(1, 23): chrom_points = [[d["x"], d["y"]] for d in all_data if d["chr"] == chrom] # Use alternating Okabe-Ito colors - color_idx = (chrom - 1) % len(OKABE_ITO) - color = OKABE_ITO[color_idx] + color_idx = (chrom - 1) % len(IMPRINT) + color = IMPRINT[color_idx] series_data.append( { "name": f"Chr {chrom}", diff --git a/plots/map-drilldown-geographic/implementations/python/highcharts.py b/plots/map-drilldown-geographic/implementations/python/highcharts.py index 602cc177d6..4faef5f75e 100644 --- a/plots/map-drilldown-geographic/implementations/python/highcharts.py +++ b/plots/map-drilldown-geographic/implementations/python/highcharts.py @@ -40,9 +40,9 @@ var REGION_COLORS = {{ 'west': '#009E73', - 'south': '#9418DB', - 'midwest': '#B71D27', - 'northeast': '#16B8F3' + 'south': '#C475FD', + 'midwest': '#AE3030', + 'northeast': '#4467A3' }}; var stateRegions = {{ diff --git a/plots/map-marker-clustered/implementations/python/highcharts.py b/plots/map-marker-clustered/implementations/python/highcharts.py index 7c3bf35579..54ebf963c8 100644 --- a/plots/map-marker-clustered/implementations/python/highcharts.py +++ b/plots/map-marker-clustered/implementations/python/highcharts.py @@ -29,9 +29,9 @@ # anyplot palette for the four store categories CATEGORY_COLORS = { "Grocery": "#009E73", # position 1 — brand green - "Electronics": "#9418DB", # position 2 — purple - "Clothing": "#B71D27", # position 3 — red - "Home Goods": "#16B8F3", # position 4 — sky blue + "Electronics": "#C475FD", # position 2 — purple + "Clothing": "#AE3030", # position 3 — red + "Home Goods": "#4467A3", # position 4 — sky blue } # Data: retail stores clustered around 15 major US cities diff --git a/plots/map-projections/implementations/python/highcharts.py b/plots/map-projections/implementations/python/highcharts.py index 8c5ba8c070..f1c3e0ed7e 100644 --- a/plots/map-projections/implementations/python/highcharts.py +++ b/plots/map-projections/implementations/python/highcharts.py @@ -26,7 +26,7 @@ # anyplot palette LAND_COLOR = "#009E73" # position 1 — brand green (land masses) -GRATICULE_COLOR = "#9418DB" # position 2 — purple (lat/lon grid) +GRATICULE_COLOR = "#C475FD" # position 2 — purple (lat/lon grid) W, H = 3200, 1800 @@ -79,7 +79,7 @@ "nullColor": LAND_COLOR, "borderColor": PAGE_BG, "borderWidth": 1.5, - "states": {"hover": {"color": "#B71D27"}, "inactive": {"opacity": 1}}, + "states": {"hover": {"color": "#AE3030"}, "inactive": {"opacity": 1}}, }, { "type": "mapline", diff --git a/plots/map-route-path/implementations/python/highcharts.py b/plots/map-route-path/implementations/python/highcharts.py index faf5c71420..6ca818b3fa 100644 --- a/plots/map-route-path/implementations/python/highcharts.py +++ b/plots/map-route-path/implementations/python/highcharts.py @@ -195,7 +195,7 @@ marker: {{ symbol: 'triangle', radius: 14, - fillColor: '#0072B2', + fillColor: '#4467A3', lineWidth: 2, lineColor: '{PAGE_BG}', rotation: 90 - pt.angle @@ -220,7 +220,7 @@ marker: {{ symbol: 'circle', radius: 8, - fillColor: '#E69F00', + fillColor: '#AE3030', lineWidth: 2, lineColor: '{PAGE_BG}' }}, @@ -260,12 +260,12 @@ type: 'mappoint', name: 'End (6 hrs)', showInLegend: true, - color: '#D55E00', + color: '#C475FD', zIndex: 20, marker: {{ symbol: 'square', radius: 18, - fillColor: '#D55E00', + fillColor: '#C475FD', lineWidth: 4, lineColor: '{PAGE_BG}' }}, @@ -275,7 +275,7 @@ style: {{ fontSize: '38px', fontWeight: 'bold', - color: '#D55E00', + color: '#C475FD', textOutline: '3px {PAGE_BG}' }}, y: -50 @@ -400,7 +400,7 @@ var arrowData = arrowPoints.map(function(pt) {{ return {{ lat: pt.lat, lon: pt.lon, - marker: {{ symbol: 'triangle', radius: 7, fillColor: '#0072B2', + marker: {{ symbol: 'triangle', radius: 7, fillColor: '#4467A3', lineWidth: 1, lineColor: '#fff', rotation: 90 - pt.angle }} }}; }}); @@ -408,7 +408,7 @@ zIndex: 16, enableMouseTracking: false, data: arrowData }}); series.push({{ type: 'mappoint', name: 'Waypoints', showInLegend: false, zIndex: 15, marker: {{ symbol: 'circle', radius: 4, - fillColor: '#E69F00', lineWidth: 1, lineColor: '#fff' }}, + fillColor: '#AE3030', lineWidth: 1, lineColor: '#fff' }}, data: waypointData }}); series.push({{ type: 'mappoint', name: 'Start (0 hrs)', showInLegend: true, @@ -422,12 +422,12 @@ }}); series.push({{ type: 'mappoint', name: 'End (6 hrs)', showInLegend: true, - color: '#D55E00', zIndex: 20, - marker: {{ symbol: 'square', radius: 9, fillColor: '#D55E00', + color: '#C475FD', zIndex: 20, + marker: {{ symbol: 'square', radius: 9, fillColor: '#C475FD', lineWidth: 2, lineColor: '#fff' }}, dataLabels: {{ enabled: true, format: 'END', style: {{ fontSize: '13px', fontWeight: 'bold', - color: '#D55E00', textOutline: '2px #fff' }}, y: -22 }}, + color: '#C475FD', textOutline: '2px #fff' }}, y: -22 }}, data: [{{ lat: endPoint.lat, lon: endPoint.lon }}] }}); Highcharts.mapChart('container', {{ diff --git a/plots/marimekko-basic/implementations/python/highcharts.py b/plots/marimekko-basic/implementations/python/highcharts.py index e4e23eb09e..5f049b10da 100644 --- a/plots/marimekko-basic/implementations/python/highcharts.py +++ b/plots/marimekko-basic/implementations/python/highcharts.py @@ -27,7 +27,7 @@ region_sizes = [450, 380, 520, 180, 120] # Market size in millions USD products = ["Enterprise", "SMB", "Consumer", "Government"] -colors = ["#009E73", "#D55E00", "#0072B2", "#CC79A7"] # Okabe-Ito positions 1-4 +colors = ["#009E73", "#C475FD", "#4467A3", "#BD8233"] # Okabe-Ito positions 1-4 market_share = { "North America": [42, 28, 22, 8], diff --git a/plots/maze-circular/implementations/python/highcharts.py b/plots/maze-circular/implementations/python/highcharts.py index acc8eae15f..46f6eebef1 100644 --- a/plots/maze-circular/implementations/python/highcharts.py +++ b/plots/maze-circular/implementations/python/highcharts.py @@ -204,7 +204,7 @@ # Bold yellow arrow with dark outline for contrast on both themes for path in [arrow_left_path, arrow_right_path, arrow_stem_path]: series_data.append( - {"type": "line", "data": path, "color": "#E69F00", "lineWidth": 22, "marker": {"enabled": False}} + {"type": "line", "data": path, "color": "#AE3030", "lineWidth": 22, "marker": {"enabled": False}} ) series_data.append( {"type": "line", "data": path, "color": wall_color, "lineWidth": 6, "marker": {"enabled": False}} diff --git a/plots/mosaic-categorical/implementations/python/highcharts.py b/plots/mosaic-categorical/implementations/python/highcharts.py index a9aaa189c5..fccc4b7b40 100644 --- a/plots/mosaic-categorical/implementations/python/highcharts.py +++ b/plots/mosaic-categorical/implementations/python/highcharts.py @@ -25,7 +25,7 @@ INK_SOFT = "#4A4A44" if THEME == "light" else "#B8B7B0" # Okabe-Ito palette — first series always #009E73 -PALETTE = ["#009E73", "#D55E00", "#0072B2"] +PALETTE = ["#009E73", "#C475FD", "#4467A3"] # Data — Physical activity level by age group (population health survey) np.random.seed(42) diff --git a/plots/network-basic/implementations/python/highcharts.py b/plots/network-basic/implementations/python/highcharts.py index 4614077f2d..97e3087a31 100644 --- a/plots/network-basic/implementations/python/highcharts.py +++ b/plots/network-basic/implementations/python/highcharts.py @@ -27,7 +27,7 @@ INK_SOFT = "#4A4A44" if THEME == "light" else "#B8B7B0" # Okabe-Ito palette positions 1–4 for the four communities -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233"] # Data: A small social network with 20 people in 4 communities nodes = [ @@ -112,7 +112,7 @@ for node in nodes: node_id = node["id"] group = node["group"] - color = OKABE_ITO[group] + color = IMPRINT[group] radius = 65 + degrees[node_id] * 8 center_x, center_y = group_centers[group] idx = group_indices[group] @@ -194,7 +194,7 @@ } chart.add_series(series) -for color, name in zip(OKABE_ITO, group_names, strict=True): +for color, name in zip(IMPRINT, group_names, strict=True): legend_series = ScatterSeries() legend_series.name = name legend_series.color = color diff --git a/plots/network-bipartite/implementations/python/highcharts.py b/plots/network-bipartite/implementations/python/highcharts.py index e752f484f0..a8862ecaea 100644 --- a/plots/network-bipartite/implementations/python/highcharts.py +++ b/plots/network-bipartite/implementations/python/highcharts.py @@ -24,7 +24,7 @@ INK_SOFT = "#4A4A44" if THEME == "light" else "#B8B7B0" COLOR_A = "#009E73" # Students — Okabe-Ito position 1 -COLOR_B = "#0072B2" # Courses — Okabe-Ito position 3 +COLOR_B = "#4467A3" # Courses — Okabe-Ito position 3 EDGE_COLOR = "rgba(74,74,68,0.22)" if THEME == "light" else "rgba(184,183,176,0.25)" # Data — student course enrollment network diff --git a/plots/network-directed/implementations/python/highcharts.py b/plots/network-directed/implementations/python/highcharts.py index 9899d0815f..cbaedc608a 100644 --- a/plots/network-directed/implementations/python/highcharts.py +++ b/plots/network-directed/implementations/python/highcharts.py @@ -25,7 +25,7 @@ # Okabe-Ito palette (first position for nodes, others for edge variants if needed) BRAND = "#009E73" # First series, always -SECONDARY = "#D55E00" # For arrow highlights if multi-directional +SECONDARY = "#C475FD" # For arrow highlights if multi-directional # Data - Software module dependencies showing import direction nodes = [ diff --git a/plots/network-force-directed/implementations/python/highcharts.py b/plots/network-force-directed/implementations/python/highcharts.py index e59b1d8d41..06d3726281 100644 --- a/plots/network-force-directed/implementations/python/highcharts.py +++ b/plots/network-force-directed/implementations/python/highcharts.py @@ -36,7 +36,7 @@ } # Community colors — Okabe-Ito positions 1-4 -community_colors = {"Tech": "#009E73", "Marketing": "#D55E00", "Finance": "#0072B2", "Design": "#CC79A7"} +community_colors = {"Tech": "#009E73", "Marketing": "#C475FD", "Finance": "#4467A3", "Design": "#BD8233"} # Build nodes with community info nodes = [] @@ -119,9 +119,9 @@ text: 'Communication ties across four departments — dense within, sparse between
' + '' + ' Tech    ' - + ' Marketing    ' - + ' Finance    ' - + ' Design' + + ' Marketing    ' + + ' Finance    ' + + ' Design' + '', style: {{fontSize: '32px', color: '{INK_SOFT}'}} }}, diff --git a/plots/network-hierarchical/implementations/python/highcharts.py b/plots/network-hierarchical/implementations/python/highcharts.py index 73d310207e..b1f4927123 100644 --- a/plots/network-hierarchical/implementations/python/highcharts.py +++ b/plots/network-hierarchical/implementations/python/highcharts.py @@ -21,7 +21,7 @@ INK_SOFT = "#4A4A44" if THEME == "light" else "#B8B7B0" # Okabe-Ito palette - first series is always #009E73 -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233"] # Build hierarchical data using Sankey diagram (alternative to organization chart) # Nodes for each level @@ -44,23 +44,23 @@ # Build nodes list with colors by level nodes_list = [ceo] -node_colors = [OKABE_ITO[0]] # CEO is level 0 +node_colors = [IMPRINT[0]] # CEO is level 0 for vp in vps: nodes_list.append(vp) - node_colors.append(OKABE_ITO[1]) + node_colors.append(IMPRINT[1]) for vp in vps: for director in directors[vp]: if director not in nodes_list: nodes_list.append(director) - node_colors.append(OKABE_ITO[2]) + node_colors.append(IMPRINT[2]) for directors_group in managers.values(): for mgr in directors_group: if mgr not in nodes_list: nodes_list.append(mgr) - node_colors.append(OKABE_ITO[3]) + node_colors.append(IMPRINT[3]) # Build links (from-to pairs with equal weight) links_list = [] diff --git a/plots/network-transport-static/implementations/python/highcharts.py b/plots/network-transport-static/implementations/python/highcharts.py index 48cb81d553..c256487daa 100644 --- a/plots/network-transport-static/implementations/python/highcharts.py +++ b/plots/network-transport-static/implementations/python/highcharts.py @@ -151,9 +151,9 @@ # Route type colors - Okabe-Ito palette: first series brand green, then orange, blue, purple route_colors = { - "EX": "#0072B2", # Express - Okabe-Ito blue - "RE": "#D55E00", # Regional - Okabe-Ito orange - "LC": "#CC79A7", # Local - Okabe-Ito reddish purple + "EX": "#4467A3", # Express - Okabe-Ito blue + "RE": "#C475FD", # Regional - Okabe-Ito orange + "LC": "#BD8233", # Local - Okabe-Ito reddish purple } # Build series data for routes @@ -186,7 +186,7 @@ ty = target["y"] + perp_y route_prefix = route["route_id"].split()[0] - color = route_colors.get(route_prefix, "#E69F00") + color = route_colors.get(route_prefix, "#AE3030") label_text = f"{route['route_id']} | {route['departure_time']} → {route['arrival_time']}" route_series_list.append( @@ -264,10 +264,10 @@ mid_y = (sy + ty) / 2 route_prefix = route["route_id"].split()[0] - color = route_colors.get(route_prefix, "#E69F00") + color = route_colors.get(route_prefix, "#AE3030") # Determine text color based on background brightness - text_color = "#1A1A17" if color not in ["#0072B2"] else "#FFFDF6" + text_color = "#1A1A17" if color not in ["#4467A3"] else "#FFFDF6" label_text = f"{route['route_id']} | {route['departure_time']} → {route['arrival_time']}" @@ -347,7 +347,7 @@ "style": {"fontSize": "28px", "fontWeight": "medium", "color": INK}, }, "subtitle": { - "text": 'Regional Rail Network - 12 Stations, 19 Routes
Express (EX)     Regional (RE)     Local (LC)', + "text": 'Regional Rail Network - 12 Stations, 19 Routes
Express (EX)     Regional (RE)     Local (LC)', "useHTML": True, "style": {"fontSize": "22px", "color": INK_SOFT}, }, diff --git a/plots/network-weighted/implementations/python/highcharts.py b/plots/network-weighted/implementations/python/highcharts.py index 062e590ebd..e3c54a1d90 100644 --- a/plots/network-weighted/implementations/python/highcharts.py +++ b/plots/network-weighted/implementations/python/highcharts.py @@ -25,7 +25,7 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" # Okabe-Ito palette -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7", "#E69F00", "#56B4E9", "#F0E442"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233", "#AE3030", "#2ABCCD", "#954477"] # Data: Research collaboration network between university departments np.random.seed(42) @@ -85,7 +85,7 @@ for i, dept in enumerate(departments): deg = weighted_degree[dept["id"]] marker_size = 50 + 70 * (deg - min_degree) / (max_degree - min_degree) - color = OKABE_ITO[i % len(OKABE_ITO)] + color = IMPRINT[i % len(IMPRINT)] nodes_data.append({"id": dept["id"], "name": dept["name"], "marker": {"radius": int(marker_size)}, "color": color}) # Create links with width based on weight @@ -151,7 +151,7 @@ height: 0; margin-right: 20px; border-top-style: solid; - border-top-color: {OKABE_ITO[0]}; + border-top-color: {IMPRINT[0]}; }} .legend-line.thin {{ width: 80px; border-top-width: 4px; }} .legend-line.medium {{ width: 80px; border-top-width: 14px; }} diff --git a/plots/ohlc-bar/implementations/python/highcharts.py b/plots/ohlc-bar/implementations/python/highcharts.py index 7949d2dce8..53767ecc44 100644 --- a/plots/ohlc-bar/implementations/python/highcharts.py +++ b/plots/ohlc-bar/implementations/python/highcharts.py @@ -28,7 +28,7 @@ # Semantic exception: finance — green=bullish/up, red=bearish/down (anyplot positions 1 and 3) UP_COLOR = "#009E73" -DOWN_COLOR = "#B71D27" +DOWN_COLOR = "#AE3030" # Data — 50 trading days of simulated stock prices np.random.seed(42) diff --git a/plots/parallel-basic/implementations/python/highcharts.py b/plots/parallel-basic/implementations/python/highcharts.py index c9fde3461a..ea8d53ca8c 100644 --- a/plots/parallel-basic/implementations/python/highcharts.py +++ b/plots/parallel-basic/implementations/python/highcharts.py @@ -67,9 +67,9 @@ for i, row in enumerate(setosa_data): series_config.append({"name": "Setosa", "data": row, "color": "rgba(0,158,115,0.65)", "showInLegend": i == 0}) for i, row in enumerate(versicolor_data): - series_config.append({"name": "Versicolor", "data": row, "color": "rgba(213,94,0,0.65)", "showInLegend": i == 0}) + series_config.append({"name": "Versicolor", "data": row, "color": "rgba(196, 117, 253, 0.65)", "showInLegend": i == 0}) for i, row in enumerate(virginica_data): - series_config.append({"name": "Virginica", "data": row, "color": "rgba(0,114,178,0.65)", "showInLegend": i == 0}) + series_config.append({"name": "Virginica", "data": row, "color": "rgba(68, 103, 163, 0.65)", "showInLegend": i == 0}) # Load Highcharts modules from local npm install (CDN blocked in headless Chrome on file://) hc_base = Path("/tmp/hc/node_modules/highcharts") diff --git a/plots/parallel-categories-basic/implementations/python/highcharts.py b/plots/parallel-categories-basic/implementations/python/highcharts.py index c0490f463e..ff8dd2f6b5 100644 --- a/plots/parallel-categories-basic/implementations/python/highcharts.py +++ b/plots/parallel-categories-basic/implementations/python/highcharts.py @@ -24,7 +24,7 @@ INK_SOFT = "#4A4A44" if THEME == "light" else "#B8B7B0" GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7", "#E69F00", "#56B4E9", "#F0E442"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233", "#AE3030", "#2ABCCD", "#954477"] # Data: Titanic survival by Class → Sex → Age Group → Survival flows = [ @@ -175,17 +175,17 @@ node_colors = {} for node in display_names: if "Survived" in node: - node_colors[node] = OKABE_ITO[0] # green + node_colors[node] = IMPRINT[0] # green elif "Died" in node: - node_colors[node] = OKABE_ITO[1] # orange + node_colors[node] = IMPRINT[1] # orange elif node.startswith("1st") or node.startswith("2nd") or node.startswith("3rd"): - node_colors[node] = OKABE_ITO[2] # blue + node_colors[node] = IMPRINT[2] # blue elif display_names[node] == "Male": - node_colors[node] = OKABE_ITO[3] # purple + node_colors[node] = IMPRINT[3] # purple elif display_names[node] == "Female": - node_colors[node] = OKABE_ITO[4] # yellow-ish + node_colors[node] = IMPRINT[4] # yellow-ish else: - node_colors[node] = OKABE_ITO[5] # sky blue + node_colors[node] = IMPRINT[5] # sky blue # Build nodes list nodes_set = set() @@ -198,7 +198,7 @@ "id": node, "name": display_names.get(node, node), "column": column_map.get(node, 0), - "color": node_colors.get(node, OKABE_ITO[0]), + "color": node_colors.get(node, IMPRINT[0]), } for node in nodes_set ] diff --git a/plots/parliament-basic/implementations/python/highcharts.py b/plots/parliament-basic/implementations/python/highcharts.py index 00b911ca3f..af90e4792a 100644 --- a/plots/parliament-basic/implementations/python/highcharts.py +++ b/plots/parliament-basic/implementations/python/highcharts.py @@ -27,7 +27,7 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" # Okabe-Ito palette -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7", "#E69F00", "#56B4E9", "#F0E442"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233", "#AE3030", "#2ABCCD", "#954477"] # Data - Legislative assembly with 6 parties (neutral context, no real politics) parties = [ @@ -146,7 +146,7 @@ } # Set color palette -chart.options.colors = OKABE_ITO +chart.options.colors = IMPRINT # Add a series for each party for idx, party in enumerate(parties): @@ -156,7 +156,7 @@ series = ScatterSeries() series.name = f"{party['name']} ({party['seats']} seats)" series.data = party_seats - series.color = OKABE_ITO[idx % len(OKABE_ITO)] + series.color = IMPRINT[idx % len(IMPRINT)] series.marker = {"radius": 8, "symbol": "circle", "lineWidth": 1, "lineColor": PAGE_BG} chart.add_series(series) diff --git a/plots/phase-diagram/implementations/python/highcharts.py b/plots/phase-diagram/implementations/python/highcharts.py index 2402ec02f6..44c586d1e1 100644 --- a/plots/phase-diagram/implementations/python/highcharts.py +++ b/plots/phase-diagram/implementations/python/highcharts.py @@ -26,7 +26,7 @@ INK_MUTED = "#6B6A63" if THEME == "light" else "#A8A79F" GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233"] # Data - Damped harmonic oscillator: d²x/dt² + 2*gamma*dx/dt + omega²*x = 0 np.random.seed(42) @@ -116,7 +116,7 @@ "padding": 15, } -chart.options.colors = OKABE_ITO +chart.options.colors = IMPRINT chart.options.credits = {"enabled": False} @@ -125,7 +125,7 @@ series = ScatterSeries() series.data = [{"x": float(xi), "y": float(dxi)} for xi, dxi in zip(x, dx_dt, strict=False)] series.name = names[i] - series.color = OKABE_ITO[i] + series.color = IMPRINT[i] series.line_width = 2 series.marker = {"radius": 4, "enabled": True} chart.add_series(series) diff --git a/plots/pie-drilldown/implementations/python/highcharts.py b/plots/pie-drilldown/implementations/python/highcharts.py index 58646ba7a5..30bc3d469e 100644 --- a/plots/pie-drilldown/implementations/python/highcharts.py +++ b/plots/pie-drilldown/implementations/python/highcharts.py @@ -23,7 +23,7 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" # Okabe-Ito palette (position 1 is brand green #009E73, then follow canonical order) -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7", "#E69F00", "#56B4E9", "#F0E442"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233", "#AE3030", "#2ABCCD", "#954477"] # Download Highcharts JS and drilldown module (required for headless Chrome) @@ -75,7 +75,7 @@ def fetch_url(url, max_retries=3): color: '{INK_SOFT}' }} }}, - colors: {OKABE_ITO}, + colors: {IMPRINT}, accessibility: {{ announceNewData: {{ enabled: true diff --git a/plots/point-and-figure-basic/implementations/python/highcharts.py b/plots/point-and-figure-basic/implementations/python/highcharts.py index be3a6654dd..bf1a939c02 100644 --- a/plots/point-and-figure-basic/implementations/python/highcharts.py +++ b/plots/point-and-figure-basic/implementations/python/highcharts.py @@ -28,7 +28,7 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" BULL = "#009E73" # Okabe-Ito position 1 — X (Rising, bullish) -BEAR = "#D55E00" # Okabe-Ito position 2 — O (Falling, bearish) +BEAR = "#AE3030" # imprint red — O (Falling, bearish) # Data - Generate realistic stock price with multiple market phases np.random.seed(42) diff --git a/plots/point-basic/implementations/python/highcharts.py b/plots/point-basic/implementations/python/highcharts.py index 9e119db3e5..c273019ebd 100644 --- a/plots/point-basic/implementations/python/highcharts.py +++ b/plots/point-basic/implementations/python/highcharts.py @@ -29,7 +29,7 @@ # Okabe-Ito palette BRAND = "#009E73" # First series - always -CI_COLOR = "#D55E00" # Second series - confidence interval +CI_COLOR = "#C475FD" # Second series - confidence interval # Data - Performance metrics by department with confidence intervals np.random.seed(42) diff --git a/plots/polar-bar/implementations/python/highcharts.py b/plots/polar-bar/implementations/python/highcharts.py index db45b5bb32..af0d1ebdf4 100644 --- a/plots/polar-bar/implementations/python/highcharts.py +++ b/plots/polar-bar/implementations/python/highcharts.py @@ -26,7 +26,7 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" # Okabe-Ito palette (first series is always #009E73) -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233"] # Data - Wind direction frequency by speed category np.random.seed(42) @@ -128,10 +128,10 @@ # Add series with Okabe-Ito colors series_data = [ - {"name": "Calm (<1 mph)", "data": calm, "color": OKABE_ITO[0]}, - {"name": "Light (1-10 mph)", "data": light, "color": OKABE_ITO[1]}, - {"name": "Moderate (10-20 mph)", "data": moderate, "color": OKABE_ITO[2]}, - {"name": "Strong (>20 mph)", "data": strong, "color": OKABE_ITO[3]}, + {"name": "Calm (<1 mph)", "data": calm, "color": IMPRINT[0]}, + {"name": "Light (1-10 mph)", "data": light, "color": IMPRINT[1]}, + {"name": "Moderate (10-20 mph)", "data": moderate, "color": IMPRINT[2]}, + {"name": "Strong (>20 mph)", "data": strong, "color": IMPRINT[3]}, ] chart.options.series = series_data diff --git a/plots/polar-basic/implementations/python/highcharts.py b/plots/polar-basic/implementations/python/highcharts.py index 0f7f752aff..885cbe4796 100644 --- a/plots/polar-basic/implementations/python/highcharts.py +++ b/plots/polar-basic/implementations/python/highcharts.py @@ -28,7 +28,7 @@ GRID = "rgba(26,26,23,0.12)" if THEME == "light" else "rgba(240,239,232,0.12)" BRAND = "#009E73" # Okabe-Ito position 1 -PEAK_COLOR = "#D55E00" # Okabe-Ito position 2 - peak highlight +PEAK_COLOR = "#C475FD" # Okabe-Ito position 2 - peak highlight # Data - 24-hour temperature cycle np.random.seed(42) diff --git a/plots/polar-line/implementations/python/highcharts.py b/plots/polar-line/implementations/python/highcharts.py index c9d84bfe62..5a39e9d635 100644 --- a/plots/polar-line/implementations/python/highcharts.py +++ b/plots/polar-line/implementations/python/highcharts.py @@ -25,7 +25,7 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" # Okabe-Ito palette (first series always #009E73) -OKABE_ITO = ["#009E73", "#D55E00"] +IMPRINT = ["#009E73", "#C475FD"] # Data - Monthly temperature pattern (cyclical, degrees around year) months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] @@ -95,8 +95,8 @@ # Add series data with Okabe-Ito colors chart.options.series = [ - {"type": "line", "name": "Continental City", "data": city_a, "color": OKABE_ITO[0], "marker": {"symbol": "circle"}}, - {"type": "line", "name": "Oceanic City", "data": city_b, "color": OKABE_ITO[1], "marker": {"symbol": "diamond"}}, + {"type": "line", "name": "Continental City", "data": city_a, "color": IMPRINT[0], "marker": {"symbol": "circle"}}, + {"type": "line", "name": "Oceanic City", "data": city_b, "color": IMPRINT[1], "marker": {"symbol": "diamond"}}, ] # Download Highcharts JS and Highcharts More for polar charts diff --git a/plots/polar-scatter/implementations/python/highcharts.py b/plots/polar-scatter/implementations/python/highcharts.py index 83d9e61db4..151d82bad7 100644 --- a/plots/polar-scatter/implementations/python/highcharts.py +++ b/plots/polar-scatter/implementations/python/highcharts.py @@ -25,7 +25,7 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" # Okabe-Ito palette -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7", "#E69F00", "#56B4E9", "#F0E442"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233", "#AE3030", "#2ABCCD", "#954477"] # Data - Wind measurements with prevailing directions np.random.seed(42) @@ -62,9 +62,9 @@ # Colors for categories using Okabe-Ito palette colors = { - "Morning": OKABE_ITO[0], # #009E73 - "Afternoon": OKABE_ITO[1], # #D55E00 - "Evening": OKABE_ITO[2], # #0072B2 + "Morning": IMPRINT[0], # #009E73 + "Afternoon": IMPRINT[1], # #C475FD + "Evening": IMPRINT[2], # #4467A3 } # Build series data for each category diff --git a/plots/precision-recall/implementations/python/highcharts.py b/plots/precision-recall/implementations/python/highcharts.py index 53d4092a9a..5d85e5bee1 100644 --- a/plots/precision-recall/implementations/python/highcharts.py +++ b/plots/precision-recall/implementations/python/highcharts.py @@ -29,7 +29,7 @@ # Okabe-Ito palette BRAND = "#009E73" # First series (primary) -SECONDARY = "#F0E442" # Baseline reference +SECONDARY = "#954477" # Baseline reference # Data - simulate binary classification results np.random.seed(42) diff --git a/plots/pyramid-basic/implementations/python/highcharts.py b/plots/pyramid-basic/implementations/python/highcharts.py index f0f2c68312..1c88e0d49e 100644 --- a/plots/pyramid-basic/implementations/python/highcharts.py +++ b/plots/pyramid-basic/implementations/python/highcharts.py @@ -111,7 +111,7 @@ { "name": "Female", "data": female_values, - "color": "#D55E00", # Okabe-Ito position 2 + "color": "#C475FD", # Okabe-Ito position 2 }, ], "credits": {"enabled": False}, diff --git a/plots/qq-basic/implementations/python/highcharts.py b/plots/qq-basic/implementations/python/highcharts.py index c4ffb774dd..b7a5785299 100644 --- a/plots/qq-basic/implementations/python/highcharts.py +++ b/plots/qq-basic/implementations/python/highcharts.py @@ -27,7 +27,7 @@ INK_SOFT = "#4A4A44" if THEME == "light" else "#B8B7B0" GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" # Warm accent for tail-deviation bands — Okabe-Ito orange, theme-adaptive opacity -BAND_COLOR = "rgba(213,94,0,0.12)" if THEME == "light" else "rgba(230,159,0,0.22)" +BAND_COLOR = "rgba(196, 117, 253, 0.12)" if THEME == "light" else "rgba(174, 48, 48, 0.22)" # Data - mixed normal to demonstrate Q-Q characteristics (slight right skew) np.random.seed(42) diff --git a/plots/radar-basic/implementations/python/highcharts.py b/plots/radar-basic/implementations/python/highcharts.py index 57d4a50c05..bd3265d7ba 100644 --- a/plots/radar-basic/implementations/python/highcharts.py +++ b/plots/radar-basic/implementations/python/highcharts.py @@ -23,7 +23,7 @@ INK_SOFT = "#4A4A44" if THEME == "light" else "#B8B7B0" GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7", "#E69F00", "#56B4E9", "#F0E442"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233", "#AE3030", "#2ABCCD", "#954477"] # Data - Employee performance metrics comparison categories = ["Communication", "Technical Skills", "Teamwork", "Problem Solving", "Leadership", "Creativity"] @@ -67,8 +67,8 @@ "backgroundColor": ELEVATED_BG, }, "series": [ - {"type": "area", "name": "Employee A", "data": employee_a_values, "color": OKABE_ITO[0], "fillOpacity": 0.25}, - {"type": "area", "name": "Employee B", "data": employee_b_values, "color": OKABE_ITO[1], "fillOpacity": 0.25}, + {"type": "area", "name": "Employee A", "data": employee_a_values, "color": IMPRINT[0], "fillOpacity": 0.25}, + {"type": "area", "name": "Employee B", "data": employee_b_values, "color": IMPRINT[1], "fillOpacity": 0.25}, ], "credits": {"enabled": False}, } diff --git a/plots/radar-multi/implementations/python/highcharts.py b/plots/radar-multi/implementations/python/highcharts.py index 32fc320e66..67e2f382be 100644 --- a/plots/radar-multi/implementations/python/highcharts.py +++ b/plots/radar-multi/implementations/python/highcharts.py @@ -44,7 +44,7 @@ product_d = [45, 85, 80, 75, 100, 40] # Okabe-Ito palette - first series always #009E73 -colors = ["#009E73", "#D55E00", "#0072B2", "#CC79A7"] +colors = ["#009E73", "#C475FD", "#4467A3", "#BD8233"] # Create chart chart = Chart(container="container") diff --git a/plots/renko-basic/implementations/python/highcharts.py b/plots/renko-basic/implementations/python/highcharts.py index f895694355..09cfe70981 100644 --- a/plots/renko-basic/implementations/python/highcharts.py +++ b/plots/renko-basic/implementations/python/highcharts.py @@ -27,7 +27,7 @@ # Okabe-Ito palette BRAND = "#009E73" # Bullish (position 1) -BEARISH = "#D55E00" # Bearish (position 2) +BEARISH = "#AE3030" # imprint red — bearish # Data - Generate synthetic stock price data np.random.seed(42) diff --git a/plots/residual-plot/implementations/python/highcharts.py b/plots/residual-plot/implementations/python/highcharts.py index 6246539029..3bdf81327e 100644 --- a/plots/residual-plot/implementations/python/highcharts.py +++ b/plots/residual-plot/implementations/python/highcharts.py @@ -28,7 +28,7 @@ # Okabe-Ito palette BRAND = "#009E73" # bluish green — ALWAYS first series -ACCENT_1 = "#D55E00" # vermillion +ACCENT_1 = "#C475FD" # vermillion # Data: Linear regression example with housing price predictions np.random.seed(42) diff --git a/plots/sankey-basic/implementations/python/highcharts.py b/plots/sankey-basic/implementations/python/highcharts.py index 71f124fb8c..60caa671d8 100644 --- a/plots/sankey-basic/implementations/python/highcharts.py +++ b/plots/sankey-basic/implementations/python/highcharts.py @@ -42,19 +42,19 @@ ] # Node colors - Okabe-Ito palette (canonical order for source nodes) -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7", "#E69F00", "#56B4E9", "#F0E442"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233", "#AE3030", "#2ABCCD", "#954477"] node_colors = { - "Coal": OKABE_ITO[0], - "Natural Gas": OKABE_ITO[1], - "Nuclear": OKABE_ITO[2], - "Petroleum": OKABE_ITO[3], - "Renewable": OKABE_ITO[4], - "Electricity": OKABE_ITO[5], - "Transportation": OKABE_ITO[6], - "Industrial": OKABE_ITO[0], - "Residential": OKABE_ITO[1], - "Commercial": OKABE_ITO[2], + "Coal": IMPRINT[0], + "Natural Gas": IMPRINT[1], + "Nuclear": IMPRINT[2], + "Petroleum": IMPRINT[3], + "Renewable": IMPRINT[4], + "Electricity": IMPRINT[5], + "Transportation": IMPRINT[6], + "Industrial": IMPRINT[0], + "Residential": IMPRINT[1], + "Commercial": IMPRINT[2], } nodes_set = set() @@ -62,7 +62,7 @@ nodes_set.add(source) nodes_set.add(target) -nodes_data = [{"id": node, "name": node, "color": node_colors.get(node, OKABE_ITO[0])} for node in nodes_set] +nodes_data = [{"id": node, "name": node, "color": node_colors.get(node, IMPRINT[0])} for node in nodes_set] links_data = [{"from": source, "to": target, "weight": value} for source, target, value in flows] # Chart diff --git a/plots/scatter-3d/implementations/python/highcharts.py b/plots/scatter-3d/implementations/python/highcharts.py index b960c4cc95..d1396e3962 100644 --- a/plots/scatter-3d/implementations/python/highcharts.py +++ b/plots/scatter-3d/implementations/python/highcharts.py @@ -26,7 +26,7 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" # Okabe-Ito palette - first series always #009E73 -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233"] # Data - 3D clustered data demonstrating spatial relationships np.random.seed(42) @@ -93,21 +93,21 @@ def download_js(url): "type": "scatter3d", "name": "Cluster A", "data": cluster1_data, - "color": OKABE_ITO[0], # Green + "color": IMPRINT[0], # Green "marker": {"radius": 14, "symbol": "circle"}, }, { "type": "scatter3d", "name": "Cluster B", "data": cluster2_data, - "color": OKABE_ITO[1], # Orange + "color": IMPRINT[1], # Orange "marker": {"radius": 14, "symbol": "circle"}, }, { "type": "scatter3d", "name": "Cluster C", "data": cluster3_data, - "color": OKABE_ITO[2], # Blue + "color": IMPRINT[2], # Blue "marker": {"radius": 14, "symbol": "circle"}, }, ] diff --git a/plots/scatter-animated-controls/implementations/python/highcharts.py b/plots/scatter-animated-controls/implementations/python/highcharts.py index ec7720703e..9a767b092c 100644 --- a/plots/scatter-animated-controls/implementations/python/highcharts.py +++ b/plots/scatter-animated-controls/implementations/python/highcharts.py @@ -27,7 +27,7 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" # Okabe-Ito palette (first series is always #009E73) -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233"] # Data - Simulated country data over 20 years (Gapminder-style) np.random.seed(42) @@ -62,7 +62,7 @@ # Region assignment for color coding regions = ["Region 1", "Region 2", "Region 3", "Region 4"] country_regions = [regions[i % 4] for i in range(n_countries)] -region_colors = {regions[i]: OKABE_ITO[i % len(OKABE_ITO)] for i in range(len(regions))} +region_colors = {regions[i]: IMPRINT[i % len(IMPRINT)] for i in range(len(regions))} # Generate time-series data for each country # GDP per capita (x): starts between 1000-50000, grows with some noise diff --git a/plots/scatter-brush-zoom/implementations/python/highcharts.py b/plots/scatter-brush-zoom/implementations/python/highcharts.py index 6e3ddcd136..c81cec0328 100644 --- a/plots/scatter-brush-zoom/implementations/python/highcharts.py +++ b/plots/scatter-brush-zoom/implementations/python/highcharts.py @@ -27,7 +27,7 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" # Okabe-Ito palette (first series is always position 1) -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233"] # Data - Generate multi-cluster dataset for demonstrating brush selection np.random.seed(42) @@ -39,22 +39,22 @@ # Cluster 1: Lower-left (Batch A) - Okabe-Ito position 1 (brand green) x1 = np.random.normal(25, 6, n_per_cluster) y1 = np.random.normal(30, 7, n_per_cluster) -clusters.append(("Batch A", x1, y1, OKABE_ITO[0])) +clusters.append(("Batch A", x1, y1, IMPRINT[0])) # Cluster 2: Upper-right (Batch B) - Okabe-Ito position 2 (vermillion) x2 = np.random.normal(75, 8, n_per_cluster) y2 = np.random.normal(80, 6, n_per_cluster) -clusters.append(("Batch B", x2, y2, OKABE_ITO[1])) +clusters.append(("Batch B", x2, y2, IMPRINT[1])) # Cluster 3: Center (Batch C) - Okabe-Ito position 3 (blue) x3 = np.random.normal(50, 10, n_per_cluster) y3 = np.random.normal(50, 10, n_per_cluster) -clusters.append(("Batch C", x3, y3, OKABE_ITO[2])) +clusters.append(("Batch C", x3, y3, IMPRINT[2])) # Cluster 4: Upper-left (Batch D) - Okabe-Ito position 4 (reddish purple) x4 = np.random.normal(20, 5, n_per_cluster) y4 = np.random.normal(75, 6, n_per_cluster) -clusters.append(("Batch D", x4, y4, OKABE_ITO[3])) +clusters.append(("Batch D", x4, y4, IMPRINT[3])) # Create chart with container chart = Chart(container="container") @@ -73,8 +73,8 @@ "resetZoomButton": { "position": {"align": "right", "verticalAlign": "top", "x": -60, "y": 30}, "theme": { - "fill": OKABE_ITO[0], - "stroke": OKABE_ITO[0], + "fill": IMPRINT[0], + "stroke": IMPRINT[0], "style": {"color": PAGE_BG, "fontSize": "22px", "fontWeight": "bold"}, "r": 10, "padding": 16, diff --git a/plots/scatter-categorical/implementations/python/highcharts.py b/plots/scatter-categorical/implementations/python/highcharts.py index 07d635798e..44fd44cdb2 100644 --- a/plots/scatter-categorical/implementations/python/highcharts.py +++ b/plots/scatter-categorical/implementations/python/highcharts.py @@ -24,7 +24,7 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" # Okabe-Ito palette -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3"] # Data - Plant growth study with three fertilizer types np.random.seed(42) @@ -61,11 +61,11 @@ { "name": category, "data": data_by_category[category], - "color": OKABE_ITO[i], + "color": IMPRINT[i], "type": "scatter", "marker": { "radius": 8, - "fillColor": OKABE_ITO[i], + "fillColor": IMPRINT[i], "lineWidth": 2, "lineColor": PAGE_BG, "fillOpacity": 0.8, diff --git a/plots/scatter-embedding/implementations/python/highcharts.py b/plots/scatter-embedding/implementations/python/highcharts.py index dab600cd8f..1767141d6e 100644 --- a/plots/scatter-embedding/implementations/python/highcharts.py +++ b/plots/scatter-embedding/implementations/python/highcharts.py @@ -29,7 +29,7 @@ INK_MUTED = "#6B6A63" if THEME == "light" else "#A8A79F" GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7", "#E69F00", "#56B4E9"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233", "#AE3030", "#2ABCCD"] # Data — simulate scRNA-seq cell types, project to 2D via t-SNE np.random.seed(42) @@ -140,7 +140,7 @@ } # One series per immune cell type -for i, (label, color) in enumerate(zip(cell_types, OKABE_ITO, strict=True)): +for i, (label, color) in enumerate(zip(cell_types, IMPRINT, strict=True)): series = ScatterSeries() series.name = label series.color = color diff --git a/plots/scatter-map-geographic/implementations/python/highcharts.py b/plots/scatter-map-geographic/implementations/python/highcharts.py index 9affcaf828..29b06d0bf6 100644 --- a/plots/scatter-map-geographic/implementations/python/highcharts.py +++ b/plots/scatter-map-geographic/implementations/python/highcharts.py @@ -25,14 +25,14 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" # Okabe-Ito palette for region colors -OKABE_ITO = [ +IMPRINT = [ "#009E73", # 1: brand green - "#D55E00", # 2: vermillion - "#0072B2", # 3: blue - "#CC79A7", # 4: reddish purple - "#E69F00", # 5: orange - "#56B4E9", # 6: sky blue - "#F0E442", # 7: yellow + "#C475FD", # 2: vermillion + "#4467A3", # 3: blue + "#BD8233", # 4: reddish purple + "#AE3030", # 5: orange + "#2ABCCD", # 6: sky blue + "#954477", # 7: yellow ] # Data - Major earthquake epicenters (synthetic but realistic data) @@ -84,7 +84,7 @@ # Assign colors by region using Okabe-Ito palette (first 7 regions) region_list = ["Japan", "South America", "Indonesia", "North America", "Mediterranean", "Asia", "Pacific", "Caribbean"] -region_colors = {region: OKABE_ITO[i % len(OKABE_ITO)] for i, region in enumerate(region_list)} +region_colors = {region: IMPRINT[i % len(IMPRINT)] for i, region in enumerate(region_list)} # Prepare data for mapbubble series - group by region regions_data = {} @@ -105,7 +105,7 @@ "type": "mapbubble", "name": region, "data": data, - "color": region_colors.get(region, OKABE_ITO[0]), + "color": region_colors.get(region, IMPRINT[0]), "marker": {"fillOpacity": 0.7, "lineWidth": 2, "lineColor": PAGE_BG}, "minSize": 20, "maxSize": 100, diff --git a/plots/scatter-matrix-interactive/implementations/python/highcharts.py b/plots/scatter-matrix-interactive/implementations/python/highcharts.py index cb330602c7..c001ca9181 100644 --- a/plots/scatter-matrix-interactive/implementations/python/highcharts.py +++ b/plots/scatter-matrix-interactive/implementations/python/highcharts.py @@ -27,8 +27,8 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" # Okabe-Ito palette - first color is always #009E73 -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2"] -COLORS = OKABE_ITO[:3] +IMPRINT = ["#009E73", "#C475FD", "#4467A3"] +COLORS = IMPRINT[:3] # Data - Iris dataset (4 variables for a 4x4 matrix) iris = load_iris() diff --git a/plots/scatter-matrix/implementations/python/highcharts.py b/plots/scatter-matrix/implementations/python/highcharts.py index 7442243791..994c894e04 100644 --- a/plots/scatter-matrix/implementations/python/highcharts.py +++ b/plots/scatter-matrix/implementations/python/highcharts.py @@ -25,7 +25,7 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" # Okabe-Ito palette for 3 categories -COLORS = ["#009E73", "#D55E00", "#0072B2"] +COLORS = ["#009E73", "#C475FD", "#4467A3"] # Data - Iris dataset (classic multivariate example) np.random.seed(42) diff --git a/plots/scatter-regression-linear/implementations/python/highcharts.py b/plots/scatter-regression-linear/implementations/python/highcharts.py index d6fb637c28..fe1c785690 100644 --- a/plots/scatter-regression-linear/implementations/python/highcharts.py +++ b/plots/scatter-regression-linear/implementations/python/highcharts.py @@ -28,13 +28,13 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" # Okabe-Ito palette -OKABE_ITO = [ +IMPRINT = [ "#009E73", # Brand green (primary) - "#D55E00", # Vermillion - "#0072B2", # Blue - "#CC79A7", # Reddish purple - "#E69F00", # Orange - "#56B4E9", # Sky blue + "#C475FD", # Vermillion + "#4467A3", # Blue + "#BD8233", # Reddish purple + "#AE3030", # Orange + "#2ABCCD", # Sky blue ] # Data: Advertising spend vs sales revenue @@ -148,7 +148,7 @@ line_series = LineSeries() line_series.data = line_data line_series.name = "Regression Line" -line_series.color = OKABE_ITO[2] # Blue +line_series.color = IMPRINT[2] # Blue chart.add_series(line_series) # Series 3: Scatter points (using brand green) @@ -156,11 +156,11 @@ scatter_series = ScatterSeries() scatter_series.data = scatter_data scatter_series.name = "Data Points" -scatter_series.color = OKABE_ITO[0] # Brand green +scatter_series.color = IMPRINT[0] # Brand green chart.add_series(scatter_series) # Set colors for the chart -chart.options.colors = OKABE_ITO +chart.options.colors = IMPRINT # Credits chart.options.credits = {"enabled": False} diff --git a/plots/scatter-regression-lowess/implementations/python/highcharts.py b/plots/scatter-regression-lowess/implementations/python/highcharts.py index 4af3297642..2154345649 100644 --- a/plots/scatter-regression-lowess/implementations/python/highcharts.py +++ b/plots/scatter-regression-lowess/implementations/python/highcharts.py @@ -27,7 +27,7 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" BRAND = "#009E73" # Okabe-Ito position 1 -ACCENT = "#D55E00" # Okabe-Ito position 2 for LOWESS curve +ACCENT = "#C475FD" # Okabe-Ito position 2 for LOWESS curve def lowess(x, y, frac=0.3): diff --git a/plots/scatter-regression-polynomial/implementations/python/highcharts.py b/plots/scatter-regression-polynomial/implementations/python/highcharts.py index 229a82ce5a..c1bb0e8e4c 100644 --- a/plots/scatter-regression-polynomial/implementations/python/highcharts.py +++ b/plots/scatter-regression-polynomial/implementations/python/highcharts.py @@ -138,7 +138,7 @@ regression_series = SplineSeries() regression_series.data = [[float(xi), float(yi)] for xi, yi in zip(x_fit, y_fit, strict=True)] regression_series.name = f"Polynomial Fit (R² = {r_squared:.3f})" -regression_series.color = "#D55E00" +regression_series.color = "#C475FD" regression_series.lineWidth = 3 regression_series.marker = {"enabled": False} @@ -147,7 +147,7 @@ chart.add_series(regression_series) # Color palette -chart.options.colors = [BRAND, "#D55E00", "#0072B2", "#CC79A7", "#E69F00", "#56B4E9", "#F0E442"] +chart.options.colors = [BRAND, "#C475FD", "#4467A3", "#BD8233", "#AE3030", "#2ABCCD", "#954477"] # Download Highcharts JS from alternative CDN highcharts_urls = [ diff --git a/plots/scatter-text/implementations/python/highcharts.py b/plots/scatter-text/implementations/python/highcharts.py index d333cb9355..20337ee5af 100644 --- a/plots/scatter-text/implementations/python/highcharts.py +++ b/plots/scatter-text/implementations/python/highcharts.py @@ -28,11 +28,11 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" # Okabe-Ito palette -OKABE_ITO = [ +IMPRINT = [ "#009E73", # position 1 (brand green - ALWAYS first series) - "#D55E00", # position 2 - "#0072B2", # position 3 - "#CC79A7", # position 4 + "#C475FD", # position 2 + "#4467A3", # position 3 + "#BD8233", # position 4 ] # Data - Simulated word embeddings after dimensionality reduction @@ -131,10 +131,10 @@ # Create data with text labels categories = { - "Programming Languages": (programming_words, OKABE_ITO[0], 0), - "Data Science": (data_words, OKABE_ITO[1], len(programming_words)), - "Web Frameworks": (web_words, OKABE_ITO[2], len(programming_words) + len(data_words)), - "Databases": (database_words, OKABE_ITO[3], len(programming_words) + len(data_words) + len(web_words)), + "Programming Languages": (programming_words, IMPRINT[0], 0), + "Data Science": (data_words, IMPRINT[1], len(programming_words)), + "Web Frameworks": (web_words, IMPRINT[2], len(programming_words) + len(data_words)), + "Databases": (database_words, IMPRINT[3], len(programming_words) + len(data_words) + len(web_words)), } for cat_name, (words, color, start_idx) in categories.items(): diff --git a/plots/shap-waterfall/implementations/python/highcharts.py b/plots/shap-waterfall/implementations/python/highcharts.py index 7965200888..d50f2481b7 100644 --- a/plots/shap-waterfall/implementations/python/highcharts.py +++ b/plots/shap-waterfall/implementations/python/highcharts.py @@ -24,8 +24,8 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" BRAND = "#009E73" # Okabe-Ito pos 1 — baseline & prediction bars -POSITIVE_COLOR = "#D55E00" # Okabe-Ito pos 2 — positive SHAP (pushes risk up) -NEGATIVE_COLOR = "#0072B2" # Okabe-Ito pos 3 — negative SHAP (pushes risk down) +POSITIVE_COLOR = "#AE3030" # imprint red — positive SHAP (pushes risk up) +NEGATIVE_COLOR = "#4467A3" # Okabe-Ito pos 3 — negative SHAP (pushes risk down) # Data — credit scoring model explaining a single loan application # Features sorted by absolute SHAP value (largest contribution first = top of chart) diff --git a/plots/silhouette-basic/implementations/python/highcharts.py b/plots/silhouette-basic/implementations/python/highcharts.py index 9c609857e5..2a18023246 100644 --- a/plots/silhouette-basic/implementations/python/highcharts.py +++ b/plots/silhouette-basic/implementations/python/highcharts.py @@ -27,7 +27,7 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" # Okabe-Ito palette for clusters -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3"] # Data - Simulated silhouette scores for 3-cluster solution np.random.seed(42) @@ -114,7 +114,7 @@ { "from": 0 if i == 0 else cluster_boundaries[i - 1] + 0.5, "to": cluster_boundaries[i] + 0.5, - "color": f"rgba({int(OKABE_ITO[i][1:3], 16)}, {int(OKABE_ITO[i][3:5], 16)}, {int(OKABE_ITO[i][5:7], 16)}, 0.08)", + "color": f"rgba({int(IMPRINT[i][1:3], 16)}, {int(IMPRINT[i][3:5], 16)}, {int(IMPRINT[i][5:7], 16)}, 0.08)", "label": { "text": f"Cluster {i}
Avg: {np.mean(cluster_data[i]):.3f}", "style": {"fontSize": "20px", "color": INK}, @@ -193,7 +193,7 @@ series = BarSeries() series.name = f"Cluster {cluster_id} (n={len(cluster_data[cluster_id])})" series.data = all_series_data[cluster_id] - series.color = OKABE_ITO[cluster_id] + series.color = IMPRINT[cluster_id] chart.add_series(series) # Export to PNG via Selenium diff --git a/plots/skewt-logp-atmospheric/implementations/python/highcharts.py b/plots/skewt-logp-atmospheric/implementations/python/highcharts.py index 572d9c6952..d35656e800 100644 --- a/plots/skewt-logp-atmospheric/implementations/python/highcharts.py +++ b/plots/skewt-logp-atmospheric/implementations/python/highcharts.py @@ -29,10 +29,10 @@ # Okabe-Ito palette — first series always #009E73 TEMP_COLOR = "#009E73" # green — temperature profile (first/primary) -DEW_COLOR = "#D55E00" # vermillion — dewpoint profile -DRY_AD_COLOR = "#0072B2" # blue — dry adiabats -MOIST_AD_COLOR = "#CC79A7" # pink — moist adiabats -MIX_COLOR = "#E69F00" # orange — mixing ratio lines +DEW_COLOR = "#C475FD" # vermillion — dewpoint profile +DRY_AD_COLOR = "#4467A3" # blue — dry adiabats +MOIST_AD_COLOR = "#BD8233" # pink — moist adiabats +MIX_COLOR = "#AE3030" # orange — mixing ratio lines # Pressure/temperature extents TEMP_MIN, TEMP_MAX = -80, 50 @@ -279,7 +279,7 @@ temp_series.z_index = 10 chart.add_series(temp_series) -# 6. Dewpoint profile — #D55E00, dashed thick +# 6. Dewpoint profile — #C475FD, dashed thick x_dew = dewpoint - (1 - yfrac_s) * SKEW_FACTOR dew_data = [[float(x), float(p)] for x, p in zip(x_dew, pressure, strict=False)] dew_series = LineSeries() diff --git a/plots/smith-chart-basic/implementations/python/highcharts.py b/plots/smith-chart-basic/implementations/python/highcharts.py index a2369d83a5..330ef62edc 100644 --- a/plots/smith-chart-basic/implementations/python/highcharts.py +++ b/plots/smith-chart-basic/implementations/python/highcharts.py @@ -177,7 +177,7 @@ # VSWR circles — Okabe-Ito positions 2, 3, 4 vswr_values = [1.5, 2.0, 3.0] -vswr_colors = ["#D55E00", "#0072B2", "#CC79A7"] +vswr_colors = ["#C475FD", "#4467A3", "#BD8233"] for i, vswr in enumerate(vswr_values): gm = (vswr - 1) / (vswr + 1) v_theta = np.linspace(0, 2 * np.pi, 200) @@ -200,7 +200,7 @@ "enabled": True, "radius": 16, "symbol": "diamond", - "fillColor": "#E69F00", + "fillColor": "#AE3030", "lineColor": INK, "lineWidth": 2, } diff --git a/plots/sn-curve-basic/implementations/python/highcharts.py b/plots/sn-curve-basic/implementations/python/highcharts.py index 44af9b7450..c879b0e6ec 100644 --- a/plots/sn-curve-basic/implementations/python/highcharts.py +++ b/plots/sn-curve-basic/implementations/python/highcharts.py @@ -29,7 +29,7 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" BRAND = "#009E73" # Okabe-Ito #1 — test data scatter -FIT_COLOR = "#D55E00" # Okabe-Ito #2 — Basquin fit line +FIT_COLOR = "#C475FD" # Okabe-Ito #2 — Basquin fit line # Data: Simulated fatigue test results for structural steel specimens np.random.seed(42) @@ -96,7 +96,7 @@ { "from": 100, "to": 10000, - "color": "rgba(213,94,0,0.07)", + "color": "rgba(196, 117, 253, 0.07)", "label": { "text": "Low-Cycle Fatigue", "style": {"fontSize": "36px", "color": INK_SOFT}, @@ -108,7 +108,7 @@ { "from": 10000, "to": 1000000, - "color": "rgba(0,114,178,0.05)", + "color": "rgba(68, 103, 163, 0.05)", "label": { "text": "High-Cycle Fatigue", "style": {"fontSize": "36px", "color": INK_SOFT}, @@ -162,13 +162,13 @@ "plotLines": [ { "value": ultimate_strength, - "color": "#CC79A7", + "color": "#BD8233", "width": 4, "dashStyle": "Dash", "label": { "text": f"Ultimate Strength ({ultimate_strength} MPa)", "align": "left", - "style": {"fontSize": "34px", "color": "#CC79A7", "fontWeight": "bold"}, + "style": {"fontSize": "34px", "color": "#BD8233", "fontWeight": "bold"}, "x": 10, "y": -10, }, @@ -176,13 +176,13 @@ }, { "value": yield_strength, - "color": "#E69F00", + "color": "#AE3030", "width": 4, "dashStyle": "Dash", "label": { "text": f"Yield Strength ({yield_strength} MPa)", "align": "left", - "style": {"fontSize": "34px", "color": "#E69F00", "fontWeight": "bold"}, + "style": {"fontSize": "34px", "color": "#AE3030", "fontWeight": "bold"}, "x": 10, "y": -10, }, @@ -190,13 +190,13 @@ }, { "value": endurance_limit, - "color": "#56B4E9", + "color": "#2ABCCD", "width": 4, "dashStyle": "Dash", "label": { "text": f"Endurance Limit ({endurance_limit} MPa)", "align": "left", - "style": {"fontSize": "34px", "color": "#56B4E9", "fontWeight": "bold"}, + "style": {"fontSize": "34px", "color": "#2ABCCD", "fontWeight": "bold"}, "x": 10, "y": -10, }, diff --git a/plots/span-basic/implementations/python/highcharts.py b/plots/span-basic/implementations/python/highcharts.py index 12e1555aff..240b069ac2 100644 --- a/plots/span-basic/implementations/python/highcharts.py +++ b/plots/span-basic/implementations/python/highcharts.py @@ -82,10 +82,10 @@ { "from": 3.5, "to": 8.5, - "color": "rgba(213,94,0,0.18)", + "color": "rgba(174, 48, 48, 0.18)", # imprint red — crisis band "label": { "text": "Financial Crisis", - "style": {"fontSize": "40px", "color": "#D55E00", "fontWeight": "bold"}, + "style": {"fontSize": "40px", "color": "#AE3030", "fontWeight": "bold"}, "verticalAlign": "top", "y": 80, }, @@ -106,10 +106,10 @@ { "from": 600, "to": 1000, - "color": "rgba(230,159,0,0.18)", + "color": "rgba(174, 48, 48, 0.18)", "label": { "text": "Bear Market Zone", - "style": {"fontSize": "36px", "color": "#E69F00", "fontWeight": "500"}, + "style": {"fontSize": "36px", "color": "#AE3030", "fontWeight": "500"}, "align": "left", "x": 40, "y": -15, diff --git a/plots/sparkline-basic/implementations/python/highcharts.py b/plots/sparkline-basic/implementations/python/highcharts.py index 4ae66b51f4..2b7b6fa3f1 100644 --- a/plots/sparkline-basic/implementations/python/highcharts.py +++ b/plots/sparkline-basic/implementations/python/highcharts.py @@ -26,8 +26,8 @@ # Okabe-Ito categorical palette — identical across themes; only chrome flips. LINE_COLOR = "#009E73" FILL_COLOR_RGBA = "rgba(0, 158, 115, 0.18)" -MIN_COLOR = "#D55E00" -MAX_COLOR = "#0072B2" +MIN_COLOR = "#C475FD" +MAX_COLOR = "#4467A3" # Data — 30 trading days of daily closing prices for a hypothetical mid-cap # stock. Geometric random walk with mild positive drift, an earnings-week diff --git a/plots/spectrum-basic/implementations/python/highcharts.py b/plots/spectrum-basic/implementations/python/highcharts.py index 53bf83205c..2d4119f50e 100644 --- a/plots/spectrum-basic/implementations/python/highcharts.py +++ b/plots/spectrum-basic/implementations/python/highcharts.py @@ -27,7 +27,7 @@ INK_SOFT = "#4A4A44" if THEME == "light" else "#B8B7B0" GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" BRAND = "#009E73" -ACCENT = "#D55E00" +ACCENT = "#C475FD" # Data - Generate a synthetic audio signal with multiple frequency components np.random.seed(42) diff --git a/plots/streamgraph-basic/implementations/python/highcharts.py b/plots/streamgraph-basic/implementations/python/highcharts.py index 2f1f1d92ea..5f5c3c546e 100644 --- a/plots/streamgraph-basic/implementations/python/highcharts.py +++ b/plots/streamgraph-basic/implementations/python/highcharts.py @@ -25,7 +25,7 @@ INK = "#1A1A17" if THEME == "light" else "#F0EFE8" INK_SOFT = "#4A4A44" if THEME == "light" else "#B8B7B0" -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7", "#E69F00"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233", "#AE3030"] # Data - Monthly streaming hours by music genre over two years np.random.seed(42) @@ -121,7 +121,7 @@ "symbolRadius": 6, } -chart.options.colors = OKABE_ITO +chart.options.colors = IMPRINT for genre in genres: series = StreamGraphSeries() diff --git a/plots/strip-basic/implementations/python/highcharts.py b/plots/strip-basic/implementations/python/highcharts.py index 9f472c89b2..6d9a615ca5 100644 --- a/plots/strip-basic/implementations/python/highcharts.py +++ b/plots/strip-basic/implementations/python/highcharts.py @@ -28,7 +28,7 @@ NEUTRAL = "#1A1A1A" if THEME == "light" else "#E8E8E0" # Okabe-Ito palette — first series is always #009E73 -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233"] # Data — student test scores by subject np.random.seed(42) @@ -131,7 +131,7 @@ for cat_idx, cat in enumerate(categories): series = ScatterSeries() series.name = cat - series.color = OKABE_ITO[cat_idx] + series.color = IMPRINT[cat_idx] series.data = [{"x": float(pt["x"]), "y": pt["y"]} for pt in strip_data if pt["category"] == cat] series.marker = {"radius": 12, "symbol": "circle", "fillOpacity": 0.65, "lineWidth": 1, "lineColor": PAGE_BG} chart.add_series(series) diff --git a/plots/subplot-grid/implementations/python/highcharts.py b/plots/subplot-grid/implementations/python/highcharts.py index 49eb9ed12d..b29b571df8 100644 --- a/plots/subplot-grid/implementations/python/highcharts.py +++ b/plots/subplot-grid/implementations/python/highcharts.py @@ -30,9 +30,9 @@ # Okabe-Ito palette BRAND = "#009E73" # First series - ALWAYS -COLOR2 = "#D55E00" -COLOR3 = "#0072B2" -COLOR4 = "#CC79A7" +COLOR2 = "#C475FD" +COLOR3 = "#4467A3" +COLOR4 = "#BD8233" # Data - Financial dashboard with price, volume, returns np.random.seed(42) diff --git a/plots/sunburst-basic/implementations/python/highcharts.py b/plots/sunburst-basic/implementations/python/highcharts.py index 7f87b0fc24..51c6ee1304 100644 --- a/plots/sunburst-basic/implementations/python/highcharts.py +++ b/plots/sunburst-basic/implementations/python/highcharts.py @@ -24,7 +24,7 @@ INK_SOFT = "#4A4A44" if THEME == "light" else "#B8B7B0" # Okabe-Ito categorical palette — first series always #009E73 -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7", "#E69F00", "#56B4E9", "#F0E442"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233", "#AE3030", "#2ABCCD", "#954477"] # Total budget for center focal point annotation TOTAL_BUDGET = 1240 # Engineering 720 + Marketing 310 + Operations 210 ($K) @@ -34,9 +34,9 @@ # Root (center circle) — background-colored so it appears as text-only focal point {"id": "root", "name": f"${TOTAL_BUDGET:,}K", "color": PAGE_BG}, # Level 1: Departments (innermost ring) — Okabe-Ito in canonical order - {"id": "engineering", "name": "Engineering", "parent": "root", "color": OKABE_ITO[0]}, - {"id": "marketing", "name": "Marketing", "parent": "root", "color": OKABE_ITO[1]}, - {"id": "operations", "name": "Operations", "parent": "root", "color": OKABE_ITO[2]}, + {"id": "engineering", "name": "Engineering", "parent": "root", "color": IMPRINT[0]}, + {"id": "marketing", "name": "Marketing", "parent": "root", "color": IMPRINT[1]}, + {"id": "operations", "name": "Operations", "parent": "root", "color": IMPRINT[2]}, # Level 2: Teams within each department {"id": "frontend", "name": "Frontend", "parent": "engineering", "value": 280}, {"id": "backend", "name": "Backend", "parent": "engineering", "value": 350}, diff --git a/plots/survival-kaplan-meier/implementations/python/highcharts.py b/plots/survival-kaplan-meier/implementations/python/highcharts.py index b1a81b16f8..d43309068e 100644 --- a/plots/survival-kaplan-meier/implementations/python/highcharts.py +++ b/plots/survival-kaplan-meier/implementations/python/highcharts.py @@ -29,7 +29,7 @@ # Okabe-Ito palette (position 1 for first series, position 2 for second) COLOR_PRIMARY = "#009E73" # First series - brand green -COLOR_SECONDARY = "#D55E00" # Second series - vermillion +COLOR_SECONDARY = "#C475FD" # Second series - vermillion # Generate synthetic clinical trial survival data np.random.seed(42) diff --git a/plots/swarm-basic/implementations/python/highcharts.py b/plots/swarm-basic/implementations/python/highcharts.py index a17a442f12..2682dbd950 100644 --- a/plots/swarm-basic/implementations/python/highcharts.py +++ b/plots/swarm-basic/implementations/python/highcharts.py @@ -28,7 +28,7 @@ NEUTRAL = "#1A1A1A" if THEME == "light" else "#E8E8E0" # Okabe-Ito palette (positions 1-4) -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233"] # Data — employee performance scores by department np.random.seed(42) @@ -140,7 +140,7 @@ for cat_idx, cat in enumerate(categories): series = ScatterSeries() series.name = cat - series.color = OKABE_ITO[cat_idx] + series.color = IMPRINT[cat_idx] cat_data = swarm_by_cat[cat] series.data = [ {"x": float(cat_idx + x_off), "y": float(val)} @@ -149,7 +149,7 @@ series.marker = { "radius": 14, "symbol": "circle", - "fillColor": OKABE_ITO[cat_idx], + "fillColor": IMPRINT[cat_idx], "lineWidth": 2, "lineColor": PAGE_BG, } diff --git a/plots/timeline-basic/implementations/python/highcharts.py b/plots/timeline-basic/implementations/python/highcharts.py index 574c9499e0..5d864f1af4 100644 --- a/plots/timeline-basic/implementations/python/highcharts.py +++ b/plots/timeline-basic/implementations/python/highcharts.py @@ -24,7 +24,7 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" # Okabe-Ito palette - first series always #009E73 -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7", "#E69F00"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233", "#AE3030"] # Data - Software project milestones events = [ @@ -41,7 +41,7 @@ ] category_order = ["Planning", "Design", "Development", "Testing", "Release"] -category_colors = {cat: OKABE_ITO[i] for i, cat in enumerate(category_order)} +category_colors = {cat: IMPRINT[i] for i, cat in enumerate(category_order)} # Build series data for each category series_data = {cat: [] for cat in category_colors} diff --git a/plots/timeseries-decomposition/implementations/python/highcharts.py b/plots/timeseries-decomposition/implementations/python/highcharts.py index 18aa908dd1..6584ce5e50 100644 --- a/plots/timeseries-decomposition/implementations/python/highcharts.py +++ b/plots/timeseries-decomposition/implementations/python/highcharts.py @@ -28,7 +28,7 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" # Okabe-Ito palette for decomposition components -COLORS = ["#009E73", "#D55E00", "#0072B2", "#CC79A7"] +COLORS = ["#009E73", "#C475FD", "#4467A3", "#BD8233"] COMPONENT_NAMES = ["Original", "Trend", "Seasonal", "Residual"] # Data - Monthly airline passengers (classic time series dataset) diff --git a/plots/timeseries-forecast-uncertainty/implementations/python/highcharts.py b/plots/timeseries-forecast-uncertainty/implementations/python/highcharts.py index 9df4f7cdf2..2fa43634d2 100644 --- a/plots/timeseries-forecast-uncertainty/implementations/python/highcharts.py +++ b/plots/timeseries-forecast-uncertainty/implementations/python/highcharts.py @@ -26,12 +26,12 @@ INK = "#1A1A17" if THEME == "light" else "#F0EFE8" INK_SOFT = "#4A4A44" if THEME == "light" else "#B8B7B0" GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" -FORECAST_BG = "rgba(213,94,0,0.06)" if THEME == "light" else "rgba(213,94,0,0.10)" +FORECAST_BG = "rgba(196, 117, 253, 0.06)" if THEME == "light" else "rgba(196, 117, 253, 0.10)" # Okabe-Ito palette (sequential positions) BRAND = "#009E73" # position 1 — historical data -FORECAST_COLOR = "#D55E00" # position 2 — forecast line -CI_COLOR = "#0072B2" # position 3 — both CI bands (opacity differentiates) +FORECAST_COLOR = "#C475FD" # position 2 — forecast line +CI_COLOR = "#4467A3" # position 3 — both CI bands (opacity differentiates) # Theme-adaptive CI fill opacity for dark-mode distinction FILL_OP_80 = 0.30 if THEME == "light" else 0.40 diff --git a/plots/tree-phylogenetic/implementations/python/highcharts.py b/plots/tree-phylogenetic/implementations/python/highcharts.py index bd87b716a1..c4f85ead20 100644 --- a/plots/tree-phylogenetic/implementations/python/highcharts.py +++ b/plots/tree-phylogenetic/implementations/python/highcharts.py @@ -23,7 +23,7 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" # Okabe-Ito palette for categorical data -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7", "#E69F00", "#56B4E9"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233", "#AE3030", "#2ABCCD"] # Data - Primate phylogenetic tree with branch lengths (MYA - Million Years Ago) phylo_nodes = { @@ -99,12 +99,12 @@ def get_y(node): # Rank color mapping using Okabe-Ito palette rank_colors = { - "Order": OKABE_ITO[0], - "Superfamily": OKABE_ITO[1], - "Family": OKABE_ITO[2], - "Tribe": OKABE_ITO[3], - "Subfamily": OKABE_ITO[4], - "Species": OKABE_ITO[5], + "Order": IMPRINT[0], + "Superfamily": IMPRINT[1], + "Family": IMPRINT[2], + "Tribe": IMPRINT[3], + "Subfamily": IMPRINT[4], + "Species": IMPRINT[5], } # Generate branch lines diff --git a/plots/treemap-basic/implementations/python/highcharts.py b/plots/treemap-basic/implementations/python/highcharts.py index 54924cc980..36ae848724 100644 --- a/plots/treemap-basic/implementations/python/highcharts.py +++ b/plots/treemap-basic/implementations/python/highcharts.py @@ -25,16 +25,16 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" # Okabe-Ito palette (positions 1-7) -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7", "#E69F00", "#56B4E9", "#F0E442"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233", "#AE3030", "#2ABCCD", "#954477"] # Data - Budget allocation by department and project data = [ # Parent categories (level 1) with Okabe-Ito colors - {"id": "engineering", "name": "Engineering", "color": OKABE_ITO[0]}, - {"id": "marketing", "name": "Marketing", "color": OKABE_ITO[1]}, - {"id": "operations", "name": "Operations", "color": OKABE_ITO[2]}, - {"id": "sales", "name": "Sales", "color": OKABE_ITO[3]}, - {"id": "hr", "name": "HR", "color": OKABE_ITO[4]}, + {"id": "engineering", "name": "Engineering", "color": IMPRINT[0]}, + {"id": "marketing", "name": "Marketing", "color": IMPRINT[1]}, + {"id": "operations", "name": "Operations", "color": IMPRINT[2]}, + {"id": "sales", "name": "Sales", "color": IMPRINT[3]}, + {"id": "hr", "name": "HR", "color": IMPRINT[4]}, # Engineering subcategories {"name": "Backend Dev", "parent": "engineering", "value": 45000}, {"name": "Frontend Dev", "parent": "engineering", "value": 38000}, @@ -96,7 +96,7 @@ "name": "Budget", "layoutAlgorithm": "squarified", "allowDrillToNode": True, - "colors": OKABE_ITO, + "colors": IMPRINT, "dataLabels": {"enabled": True, "style": {"fontSize": "20px", "color": INK}}, "levels": [ { diff --git a/plots/venn-basic/implementations/python/highcharts.py b/plots/venn-basic/implementations/python/highcharts.py index b95eb72c65..4a50575d80 100644 --- a/plots/venn-basic/implementations/python/highcharts.py +++ b/plots/venn-basic/implementations/python/highcharts.py @@ -26,7 +26,7 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" # Okabe-Ito palette (first series always #009E73) -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3"] # Download Highcharts JS and Venn module (required for headless Chrome) headers = { @@ -89,7 +89,7 @@ } # Use Okabe-Ito palette (first series #009E73) -chart.options.colors = OKABE_ITO +chart.options.colors = IMPRINT chart.add_series(series) diff --git a/plots/venn-labeled-items/implementations/python/highcharts.py b/plots/venn-labeled-items/implementations/python/highcharts.py index c98d143882..b8c8bc626c 100644 --- a/plots/venn-labeled-items/implementations/python/highcharts.py +++ b/plots/venn-labeled-items/implementations/python/highcharts.py @@ -25,8 +25,8 @@ INK_MUTED = "#6B6A63" if THEME == "light" else "#A8A79F" # Okabe-Ito categorical palette: first series is brand green -CIRCLE_COLORS = ["#009E73", "#D55E00", "#0072B2"] -CIRCLE_FILLS = ["rgba(0,158,115,0.22)", "rgba(213,94,0,0.22)", "rgba(0,114,178,0.22)"] +CIRCLE_COLORS = ["#009E73", "#C475FD", "#4467A3"] +CIRCLE_FILLS = ["rgba(0,158,115,0.22)", "rgba(196, 117, 253, 0.22)", "rgba(68, 103, 163, 0.22)"] # Editorial Chartgeist-style commentary on tech/culture circles = [{"name": "Overhyped"}, {"name": "Actually Useful"}, {"name": "Secretly Loved"}] diff --git a/plots/violin-grouped-swarm/implementations/python/highcharts.py b/plots/violin-grouped-swarm/implementations/python/highcharts.py index f3345e9a6a..ce728df484 100644 --- a/plots/violin-grouped-swarm/implementations/python/highcharts.py +++ b/plots/violin-grouped-swarm/implementations/python/highcharts.py @@ -28,14 +28,14 @@ INK_SOFT = "#4A4A44" if THEME == "light" else "#B8B7B0" RULE = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7", "#E69F00", "#56B4E9", "#F0E442"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233", "#AE3030", "#2ABCCD", "#954477"] # Data - Response times (ms) across task types and expertise levels np.random.seed(42) categories = ["Pattern Match", "Memory Recall", "Calculation"] groups = ["Novice", "Expert"] -colors = {"Novice": "#009E73", "Expert": "#D55E00"} +colors = {"Novice": "#009E73", "Expert": "#C475FD"} # Generate realistic response time data raw_data = {} @@ -131,7 +131,7 @@ def create_swarm_points(y_values, x_center, width, point_size=0.03): chart.options = HighchartsOptions() # Set color palette -chart.options.colors = OKABE_ITO +chart.options.colors = IMPRINT # Chart configuration chart.options.chart = { diff --git a/plots/violin-split/implementations/python/highcharts.py b/plots/violin-split/implementations/python/highcharts.py index 7d44987a6e..7b955c8767 100644 --- a/plots/violin-split/implementations/python/highcharts.py +++ b/plots/violin-split/implementations/python/highcharts.py @@ -26,7 +26,7 @@ # Okabe-Ito palette (first series always #009E73) BRAND = "#009E73" -ACCENT = "#D55E00" +ACCENT = "#C475FD" # Data - Employee satisfaction scores by department, comparing Remote vs Office workers np.random.seed(42) diff --git a/plots/violin-swarm/implementations/python/highcharts.py b/plots/violin-swarm/implementations/python/highcharts.py index f1bf6dd350..aaf9e9abf8 100644 --- a/plots/violin-swarm/implementations/python/highcharts.py +++ b/plots/violin-swarm/implementations/python/highcharts.py @@ -30,7 +30,7 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" # Okabe-Ito palette - first series is always #009E73 -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233"] # Data - Reaction times (ms) across 4 experimental conditions np.random.seed(42) @@ -70,7 +70,7 @@ "y_grid": y_grid, "density": density_norm, "raw_data": data, - "color": OKABE_ITO[i], + "color": IMPRINT[i], } ) diff --git a/plots/volcano-basic/implementations/python/highcharts.py b/plots/volcano-basic/implementations/python/highcharts.py index 8cec5786a1..918308f5d6 100644 --- a/plots/volcano-basic/implementations/python/highcharts.py +++ b/plots/volcano-basic/implementations/python/highcharts.py @@ -25,7 +25,7 @@ INK_SOFT = "#4A4A44" if THEME == "light" else "#B8B7B0" GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233"] COLOR_NEUTRAL = "#1A1A1A" if THEME == "light" else "#E8E8E0" np.random.seed(42) @@ -124,14 +124,14 @@ series_down = ScatterSeries() series_down.name = f"Down-regulated ({np.sum(sig_down)})" series_down.data = [[float(x), float(y)] for x, y in zip(log2_fc[sig_down], neg_log10_p[sig_down], strict=True)] -series_down.color = OKABE_ITO[2] +series_down.color = IMPRINT[2] series_down.marker = {"radius": 10, "symbol": "circle"} chart.add_series(series_down) series_up = ScatterSeries() series_up.name = f"Up-regulated ({np.sum(sig_up)})" series_up.data = [[float(x), float(y)] for x, y in zip(log2_fc[sig_up], neg_log10_p[sig_up], strict=True)] -series_up.color = OKABE_ITO[1] +series_up.color = IMPRINT[1] series_up.marker = {"radius": 10, "symbol": "circle"} chart.add_series(series_up) diff --git a/plots/voronoi-basic/implementations/python/highcharts.py b/plots/voronoi-basic/implementations/python/highcharts.py index 858f678e86..a51e1282d5 100644 --- a/plots/voronoi-basic/implementations/python/highcharts.py +++ b/plots/voronoi-basic/implementations/python/highcharts.py @@ -26,14 +26,14 @@ GRID = "rgba(26,26,23,0.10)" if THEME == "light" else "rgba(240,239,232,0.10)" # Okabe-Ito palette - first color is always brand green -OKABE_ITO = [ +IMPRINT = [ "#009E73", # bluish green (brand) - "#D55E00", # vermillion - "#0072B2", # blue - "#CC79A7", # reddish purple - "#E69F00", # orange - "#56B4E9", # sky blue - "#F0E442", # yellow + "#C475FD", # vermillion + "#4467A3", # blue + "#BD8233", # reddish purple + "#AE3030", # orange + "#2ABCCD", # sky blue + "#954477", # yellow ] # Data - Generate seed points for Voronoi diagram @@ -142,7 +142,7 @@ def compute_intersection(p1, p2, edge): # Close the polygon clipped.append(clipped[0]) - color = OKABE_ITO[idx % len(OKABE_ITO)] + color = IMPRINT[idx % len(IMPRINT)] polygon_series.append( { diff --git a/plots/waterfall-basic/implementations/python/highcharts.py b/plots/waterfall-basic/implementations/python/highcharts.py index 6e0ff10549..ba7a9d4946 100644 --- a/plots/waterfall-basic/implementations/python/highcharts.py +++ b/plots/waterfall-basic/implementations/python/highcharts.py @@ -26,8 +26,8 @@ # Okabe-Ito palette: positive = brand green, negative = vermillion POSITIVE_COLOR = "#009E73" # Okabe-Ito position 1 (brand green) -NEGATIVE_COLOR = "#D55E00" # Okabe-Ito position 2 (vermillion) -TOTAL_COLOR = "#0072B2" # Okabe-Ito position 3 (blue) for start/end totals +NEGATIVE_COLOR = "#AE3030" # imprint red — negative +TOTAL_COLOR = "#4467A3" # Okabe-Ito position 3 (blue) for start/end totals # Data - Quarterly financial breakdown from revenue to net income categories = [ diff --git a/plots/wordcloud-basic/implementations/python/highcharts.py b/plots/wordcloud-basic/implementations/python/highcharts.py index 8ac696de24..45c1577380 100644 --- a/plots/wordcloud-basic/implementations/python/highcharts.py +++ b/plots/wordcloud-basic/implementations/python/highcharts.py @@ -22,7 +22,7 @@ INK = "#1A1A17" if THEME == "light" else "#F0EFE8" INK_SOFT = "#4A4A44" if THEME == "light" else "#B8B7B0" -OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7", "#E69F00", "#56B4E9", "#F0E442"] +IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233", "#AE3030", "#2ABCCD", "#954477"] # Data - Technology terms and their frequency from a developer survey words_data = [ @@ -97,7 +97,7 @@ "spiral": "rectangular", "rotation": {"from": 0, "to": 60, "orientations": 4}, "style": {"fontFamily": "Arial, sans-serif", "fontWeight": "normal"}, - "colors": OKABE_ITO, + "colors": IMPRINT, } ]