chore(palette): migrate bokeh impls from Okabe-Ito to imprint#7783
Merged
Conversation
Contributor
There was a problem hiding this comment.
Pull request overview
This PR migrates Bokeh plot implementations from the Okabe-Ito palette to the project’s imprint palette (including a small set of semantic color overrides where the positional swap would change meaning), and updates Python optional deps to include squarify for the seaborn treemap spec.
Changes:
- Replace Okabe-Ito hex literals with imprint palette equivalents across a large set of Bokeh implementations.
- Apply targeted semantic overrides (e.g., red/amber/green) for plots where color meaning matters (loss/down/critical, traffic-light zones, etc.).
- Add
squarifyto theplottingextra inpyproject.toml.
Reviewed changes
Copilot reviewed 136 out of 136 changed files in this pull request and generated 8 comments.
Show a summary per file
| File | Description |
|---|---|
| pyproject.toml | Add squarify to plotting extras for treemap-basic seaborn implementation |
| plots/windrose-basic/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/waterfall-basic/implementations/python/bokeh.py | Semantic override: negative changes → imprint red; totals → imprint blue |
| plots/waffle-basic/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/voronoi-basic/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/volcano-basic/implementations/python/bokeh.py | Replace palette constants with imprint equivalents |
| plots/violin-split/implementations/python/bokeh.py | Replace group colors with imprint equivalents |
| plots/violin-grouped-swarm/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/violin-box/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/venn-labeled-items/implementations/python/bokeh.py | Replace set colors with imprint equivalents |
| plots/venn-basic/implementations/python/bokeh.py | Replace set colors with imprint equivalents |
| plots/treemap-basic/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/timeseries-forecast-uncertainty/implementations/python/bokeh.py | Replace palette constants with imprint equivalents |
| plots/timeseries-decomposition/implementations/python/bokeh.py | Replace component colors with imprint equivalents |
| plots/timeline-basic/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/swarm-basic/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/survival-kaplan-meier/implementations/python/bokeh.py | Replace control color with imprint equivalent |
| plots/sunburst-basic/implementations/python/bokeh.py | Replace department base colors with imprint equivalents |
| plots/subplot-mosaic/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents across subplots |
| plots/subplot-grid/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents across subplots |
| plots/strip-basic/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/streamgraph-basic/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/spectrum-basic/implementations/python/bokeh.py | Replace peak marker colors with imprint equivalents |
| plots/sparkline-basic/implementations/python/bokeh.py | Replace min highlight color with imprint equivalent |
| plots/span-basic/implementations/python/bokeh.py | Replace span highlight colors with imprint equivalents |
| plots/sn-curve-basic/implementations/python/bokeh.py | Replace series colors with imprint equivalents |
| plots/smith-chart-basic/implementations/python/bokeh.py | Replace boundary/marker colors with imprint equivalents |
| plots/slope-basic/implementations/python/bokeh.py | Semantic override: decrease → imprint red |
| plots/skewt-logp-atmospheric/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/silhouette-basic/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/shap-waterfall/implementations/python/bokeh.py | Semantic override: positive SHAP → imprint red; negative → imprint blue |
| plots/scatter-regression-polynomial/implementations/python/bokeh.py | Replace accent color with imprint equivalent |
| plots/scatter-regression-lowess/implementations/python/bokeh.py | Replace accent color with imprint equivalent |
| plots/scatter-regression-linear/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/scatter-matrix/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/scatter-matrix-interactive/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/scatter-embedding/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/scatter-brush-zoom/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/scatter-animated-controls/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/sankey-basic/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/roc-curve/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents for ROC lines |
| plots/residual-plot/implementations/python/bokeh.py | Replace outlier highlight color with imprint equivalent |
| plots/renko-basic/implementations/python/bokeh.py | Semantic override: bearish/down bricks → imprint red |
| plots/range-interval/implementations/python/bokeh.py | Replace accent color with imprint equivalent |
| plots/radar-multi/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/pyramid-basic/implementations/python/bokeh.py | Replace female color with imprint equivalent |
| plots/precision-recall/implementations/python/bokeh.py | Replace accent color with imprint equivalent |
| plots/polar-scatter/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/polar-bar/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/point-and-figure-basic/implementations/python/bokeh.py | Semantic override: bearish O columns → imprint red; update support/resistance colors |
| plots/pie-drilldown/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/phase-diagram/implementations/python/bokeh.py | Replace trajectory colors with imprint equivalents |
| plots/pdp-basic/implementations/python/bokeh.py | Replace accent color with imprint equivalent |
| plots/parliament-basic/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/parallel-categories-basic/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/network-transport-static/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/network-hierarchical/implementations/python/bokeh.py | Replace level colors with imprint equivalents |
| plots/network-force-directed/implementations/python/bokeh.py | Replace community colors with imprint equivalents |
| plots/network-directed/implementations/python/bokeh.py | Replace group colors with imprint equivalents |
| plots/network-bipartite/implementations/python/bokeh.py | Replace course color with imprint equivalent |
| plots/network-basic/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/mosaic-categorical/implementations/python/bokeh.py | Replace survival colors with imprint equivalents |
| plots/maze-circular/implementations/python/bokeh.py | Replace goal highlight color with imprint equivalent |
| plots/marimekko-basic/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/map-route-path/implementations/python/bokeh.py | Replace end marker color with imprint equivalent |
| plots/map-marker-clustered/implementations/python/bokeh.py | Replace anyplot palette with imprint equivalents |
| plots/manhattan-gwas/implementations/python/bokeh.py | Replace alternating chrom colors / significance color with imprint equivalents |
| plots/lollipop-grouped/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/logistic-regression/implementations/python/bokeh.py | Replace class color with imprint equivalent |
| plots/linked-views-selection/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/line-timeseries-rolling/implementations/python/bokeh.py | Replace line colors with imprint equivalents |
| plots/line-styled/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/line-stock-comparison/implementations/python/bokeh.py | Replace palette list with imprint equivalents |
| plots/line-multi/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/line-markers/implementations/python/bokeh.py | Replace color constants with imprint equivalents |
| plots/line-loss-training/implementations/python/bokeh.py | Replace validation color with imprint equivalent |
| plots/lift-curve/implementations/python/bokeh.py | Replace baseline color with imprint equivalent |
| plots/learning-curve-basic/implementations/python/bokeh.py | Replace validation color with imprint equivalent |
| plots/kagi-basic/implementations/python/bokeh.py | Semantic override: bearish/yin → imprint red |
| plots/indicator-sma/implementations/python/bokeh.py | Replace series colors with imprint equivalents |
| plots/indicator-macd/implementations/python/bokeh.py | Semantic override for negative histogram + palette migration for lines |
| plots/indicator-bollinger/implementations/python/bokeh.py | Replace accent colors with imprint equivalents |
| plots/icicle-basic/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/horizon-basic/implementations/python/bokeh.py | Replace pos/neg ramps with imprint-consistent blue/red ramps |
| plots/hive-basic/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/histogram-stepwise/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/histogram-stacked/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/histogram-returns-distribution/implementations/python/bokeh.py | Replace tail highlight / normal curve colors with imprint equivalents |
| plots/histogram-overlapping/implementations/python/bokeh.py | Replace color constants with imprint equivalents |
| plots/histogram-kde/implementations/python/bokeh.py | Replace KDE color with imprint equivalent |
| plots/histogram-density/implementations/python/bokeh.py | Replace PDF color with imprint equivalent |
| plots/hierarchy-toggle-view/implementations/python/bokeh.py | Replace department colors with imprint equivalents |
| plots/gauge-basic/implementations/python/bokeh.py | Semantic override: traffic-light zones → imprint red/amber/green |
| plots/gantt-basic/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/gain-curve/implementations/python/bokeh.py | Semantic override: perfect-model reference line → imprint blue |
| plots/frontier-efficient/implementations/python/bokeh.py | Replace accent colors with imprint equivalents |
| plots/frequency-polygon-basic/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/forest-basic/implementations/python/bokeh.py | Replace secondary color with imprint equivalent |
| plots/facet-grid/implementations/python/bokeh.py | Replace region palette with imprint equivalents |
| plots/errorbar-basic/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/elbow-curve/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/dumbbell-basic/implementations/python/bokeh.py | Replace accent color with imprint equivalent |
| plots/drawdown-basic/implementations/python/bokeh.py | Semantic override: drawdown/loss → imprint red; adjust contrasting accent |
| plots/dot-matrix-proportional/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/donut-nested/implementations/python/bokeh.py | Replace department palettes with imprint equivalents |
| plots/donut-basic/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/diagnostic-regression-panel/implementations/python/bokeh.py | Replace reference/contour colors with imprint equivalents |
| plots/dendrogram-radial/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/datamatrix-basic/implementations/python/bokeh.py | Replace structural overlay colors with imprint equivalents |
| plots/dashboard-synchronized-crosshair/implementations/python/bokeh.py | Replace series colors with imprint equivalents |
| plots/dashboard-metrics-tiles/implementations/python/bokeh.py | Semantic override: status colors + unfavorable color → imprint anchors |
| plots/contour-map-geographic/implementations/python/bokeh.py | Replace coastline/border colors with imprint equivalents |
| plots/contour-decision-boundary/implementations/python/bokeh.py | Replace class colors with imprint equivalents |
| plots/circos-basic/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/circlepacking-basic/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/candlestick-volume/implementations/python/bokeh.py | Semantic override: down days → imprint red |
| plots/bubble-map-geographic/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/box-notched/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/box-horizontal/implementations/python/bokeh.py | Replace alt color with imprint equivalent |
| plots/bland-altman-basic/implementations/python/bokeh.py | Replace accent color with imprint equivalent |
| plots/biplot-pca/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/bar-stacked/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/bar-stacked-percent/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/bar-stacked-labeled/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/bar-spine/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/bar-race-animated/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/bar-grouped/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/bar-drilldown/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents (including JS args) |
| plots/bar-diverging/implementations/python/bokeh.py | Semantic override: negative brand color → imprint red |
| plots/bar-3d-categorical/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/area-stacked/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/area-stacked-percent/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/area-stacked-confidence/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/area-cumulative-flow/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/andrews-curves/implementations/python/bokeh.py | Replace categorical palette with imprint equivalents |
| plots/alluvial-basic/implementations/python/bokeh.py | Replace palette constants with imprint equivalents |
Comment on lines
92
to
94
| # matplotlib add-ons required by individual specs (cartopy: map-projections, | ||
| # wordcloud: wordcloud-basic, matplotlib-venn: venn-basic) | ||
| # wordcloud: wordcloud-basic, matplotlib-venn: venn-basic, squarify: treemap-basic seaborn) | ||
| "cartopy>=0.24.0", |
Comment on lines
+56
to
+61
| # Department color families using Okabe-Ito bases with tints for child levels | ||
| dept_colors = { | ||
| "Engineering": {"base": "#009E73", "mid": "#55C4A4", "light": "#AAE0D5"}, | ||
| "Marketing": {"base": "#E69F00", "mid": "#F0BC4D", "light": "#F7D899"}, | ||
| "Sales": {"base": "#0072B2", "mid": "#4DA6D5", "light": "#99CDE8"}, | ||
| "Operations": {"base": "#CC79A7", "mid": "#DDA5C5", "light": "#EED2E3"}, | ||
| "Marketing": {"base": "#AE3030", "mid": "#F0BC4D", "light": "#F7D899"}, | ||
| "Sales": {"base": "#4467A3", "mid": "#4DA6D5", "light": "#99CDE8"}, | ||
| "Operations": {"base": "#BD8233", "mid": "#DDA5C5", "light": "#EED2E3"}, |
Comment on lines
+27
to
+31
| # Okabe-Ito palette for MACD components | ||
| HIST_POSITIVE = "#009E73" # Position 1 - brand green | ||
| HIST_NEGATIVE = "#D55E00" # Position 2 - vermillion/orange | ||
| MACD_LINE_COLOR = "#0072B2" # Position 3 - blue | ||
| SIGNAL_LINE_COLOR = "#E69F00" # Position 5 - orange | ||
| HIST_NEGATIVE = "#AE3030" # imprint red — bars below zero | ||
| MACD_LINE_COLOR = "#4467A3" # Position 3 - blue | ||
| SIGNAL_LINE_COLOR = "#AE3030" # Position 5 - orange |
Comment on lines
26
to
+28
| # Okabe-Ito palette | ||
| COLOR_UP = "#D55E00" # vermillion | ||
| COLOR_DOWN = "#0072B2" # blue | ||
| COLOR_UP = "#C475FD" # vermillion | ||
| COLOR_DOWN = "#4467A3" # blue |
Comment on lines
41
to
+43
| # Okabe-Ito colors for split groups | ||
| COLOR_PLACEBO = "#009E73" # First series - brand green | ||
| COLOR_TREATMENT = "#D55E00" # Second series - vermillion | ||
| COLOR_TREATMENT = "#C475FD" # Second series - vermillion |
Comment on lines
30
to
37
| # Okabe-Ito palette (first series always #009E73) | ||
| OKABE_ITO = [ | ||
| IMPRINT = [ | ||
| "#009E73", # brand green | ||
| "#D55E00", # vermillion | ||
| "#0072B2", # blue | ||
| "#CC79A7", # reddish purple | ||
| "#E69F00", # orange | ||
| "#C475FD", # vermillion | ||
| "#4467A3", # blue | ||
| "#BD8233", # reddish purple | ||
| "#AE3030", # orange | ||
| ] |
Comment on lines
45
to
47
| # anyplot palette — canonical order | ||
| ANYPLOT_PALETTE = ["#009E73", "#9418DB", "#B71D27", "#16B8F3"] | ||
| IMPRINT = ["#009E73", "#C475FD", "#AE3030", "#4467A3"] | ||
|
|
Comment on lines
48
to
51
| # Add horizontal span - highlight target revenue range (120-140) | ||
| horizontal_span = BoxAnnotation( | ||
| bottom=120, top=140, fill_alpha=0.2, fill_color="#E69F00", line_color="#E69F00", line_width=2, line_alpha=0.5 | ||
| bottom=120, top=140, fill_alpha=0.2, fill_color="#AE3030", line_color="#AE3030", line_width=2, line_alpha=0.5 | ||
| ) |
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
Positional hex + rgba replacement across 135 bokeh impls that already ship light+dark renders. Mirrors PRs #7776/#7779/#7780/#7781. Stage A now handles rgba(r,g,b,a) literals natively (added in #7781), so the outline/fill mismatch class that bit the plotly PR doesn't recur here. Proactive semantic-anchor fixes for 13 bokeh impls where slot-1 (now lavender) or slot-5 (now red) carried explicit meaning: - bar-diverging BRAND_NEG → red - candlestick-volume COLOR_DOWN → red - dashboard-metrics-tiles status warn→amber, critical→red, UNFAVORABLE→red - gain-curve SECONDARY → blue (perfect-model reference) - gauge-basic ZONE_LOW/MID → red/amber traffic-light - horizon-basic neg_colors → warm-red ramp (light→mid→dark red) - indicator-macd HIST_NEGATIVE → red - kagi-basic YIN_COLOR → red - point-and-figure-basic O_COLOR → red - renko-basic BEARISH_COLOR → red - shap-waterfall POS_COLOR → red (vs blue NEG) - slope-basic DECREASE_COLOR → red - waterfall-basic NEGATIVE → red Drive-by: add squarify to the [plotting] extra. It's required by `plots/treemap-basic/implementations/python/seaborn.py` and was the last spec to fail Stage B during the seaborn pass. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- sunburst-basic regenerate department mid/light tints from each
new imprint base (the old tints were Okabe-Ito
siblings of the previous bases and no longer
related — Marketing base went red but mid stayed
amber, Operations base went ochre but mid stayed
pink-tint)
- indicator-macd SIGNAL_LINE_COLOR was #AE3030, same red as
HIST_NEGATIVE — moved to ochre so the signal
line is distinguishable from negative bars
- map-marker-clustered IMPRINT list reordered to the canonical
imprint slot order (green, lavender, blue, ochre)
instead of the ad-hoc green/lavender/red/blue
- span-basic target-revenue highlight was red after the
positional swap (semantic bad anchor); moved to
amber so a "desired range" doesn't read as a
failure zone
Drive-by: tightened the squarify comment in pyproject.toml so the
parenthesis structure reads cleanly.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
51548cb to
dcfbe97
Compare
Comment on lines
38
to
+42
| color_palettes = { | ||
| "Engineering": ["#009E73", "#1ab98d", "#35d5a7", "#4ff1c1"], # Greens (position 1) | ||
| "Marketing": ["#D55E00", "#e07714", "#eb8f28", "#f6a83c"], # Oranges (position 2) | ||
| "Sales": ["#0072B2", "#1f8ac9", "#3ea2e0", "#5dbaf7"], # Blues (position 3) | ||
| "Operations": ["#CC79A7", "#d98cbc", "#e69fd1", "#f3b2e6"], # Purples (position 4) | ||
| "Marketing": ["#C475FD", "#e07714", "#eb8f28", "#f6a83c"], # Oranges (position 2) | ||
| "Sales": ["#4467A3", "#1f8ac9", "#3ea2e0", "#5dbaf7"], # Blues (position 3) | ||
| "Operations": ["#BD8233", "#d98cbc", "#e69fd1", "#f3b2e6"], # Purples (position 4) |
Comment on lines
68
to
75
| horizontal_label = Label( | ||
| x=17, | ||
| y=124, | ||
| text="Target Range", | ||
| text_font_size="28pt", | ||
| text_color="#B8720B" if THEME == "light" else "#E69F00", | ||
| text_color="#B8720B" if THEME == "light" else "#AE3030", | ||
| text_font_style="bold", | ||
| ) |
Comment on lines
27
to
+28
| # Okabe-Ito palette for speed bins (cool to warm progression) | ||
| OKABE_ITO = ["#009E73", "#D55E00", "#0072B2", "#CC79A7", "#E69F00"] | ||
| IMPRINT = ["#009E73", "#C475FD", "#4467A3", "#BD8233", "#AE3030"] |
Comment on lines
26
to
34
| # Theme tokens | ||
| THEME = os.getenv("ANYPLOT_THEME", "light") | ||
| PAGE_BG = "#FAF8F1" if THEME == "light" else "#1A1A17" | ||
| ELEVATED_BG = "#FFFDF6" if THEME == "light" else "#242420" | ||
| INK = "#1A1A17" if THEME == "light" else "#F0EFE8" | ||
| INK_SOFT = "#4A4A44" if THEME == "light" else "#B8B7B0" | ||
|
|
||
| ANYPLOT_PALETTE = ["#009E73", "#9418DB", "#B71D27", "#16B8F3"] | ||
| IMPRINT = ["#009E73", "#C475FD", "#AE3030", "#4467A3"] | ||
|
|
Comment on lines
26
to
29
| # Okabe-Ito palette | ||
| COLOR_UP = "#D55E00" # vermillion | ||
| COLOR_DOWN = "#0072B2" # blue | ||
| COLOR_UP = "#C475FD" # vermillion | ||
| COLOR_DOWN = "#4467A3" # blue | ||
| COLOR_NS = "#AAAAAA" # neutral gray |
Comment on lines
30
to
37
| # Okabe-Ito palette (first series always #009E73) | ||
| OKABE_ITO = [ | ||
| IMPRINT = [ | ||
| "#009E73", # brand green | ||
| "#D55E00", # vermillion | ||
| "#0072B2", # blue | ||
| "#CC79A7", # reddish purple | ||
| "#E69F00", # orange | ||
| "#C475FD", # vermillion | ||
| "#4467A3", # blue | ||
| "#BD8233", # reddish purple | ||
| "#AE3030", # orange | ||
| ] |
Comment on lines
35
to
38
| # anyplot palette with semantic override: loss/drawdown → red | ||
| DRAWDOWN_COLOR = "#B71D27" # anyplot red (pos 3) — semantic: financial loss | ||
| MAX_DD_COLOR = "#16B8F3" # anyplot sky blue (pos 4) — contrasting accent | ||
| DRAWDOWN_COLOR = "#AE3030" # anyplot red (pos 3) — semantic: financial loss | ||
| MAX_DD_COLOR = "#4467A3" # anyplot sky blue (pos 4) — contrasting accent | ||
| RECOVERY_COLOR = "#009E73" # anyplot green (pos 1) — recovery / new highs |
Comment on lines
27
to
30
| OKABE_ITO_1 = "#009E73" # Bluish green (brand) | ||
| OKABE_ITO_2 = "#D55E00" # Vermillion | ||
| OKABE_ITO_4 = "#CC79A7" # Reddish purple | ||
| OKABE_ITO_2 = "#C475FD" # Vermillion | ||
| OKABE_ITO_4 = "#BD8233" # Reddish purple | ||
|
|
MarkusNeusinger
added a commit
that referenced
this pull request
May 27, 2026
Positional hex + rgba replacement across 135 altair impls with light+dark renders. Stage A's rgba pass keeps the outline/fill pattern clean from the start (same approach as #7783 for bokeh). Proactive semantic-anchor fixes for 14 altair impls where slot-1 (now lavender) or slot-5 (now red) carried explicit meaning: - bar-diverging NEGATIVE_COLOR → red - candlestick-volume BEARISH → red - dashboard-metrics-tiles WARN_COLOR→amber, CRIT_COLOR→red - gauge-basic ZONE_BAD/WARN/GOOD → red/amber/green - kagi-basic YIN_COLOR → red - ohlc-bar DOWN_COLOR → red - point-and-figure-basic BEAR_COLOR → red - renko-basic BEARISH → red - shap-waterfall POS_COLOR → red - slope-basic COLOR_DECREASE → red - span-basic SPAN2_COLOR → amber (warning threshold) - waterfall-basic NEGATIVE_COLOR → red - map-marker-clustered IMPRINT list → canonical slot order SECONDARY constants that mark a *categorical second series* rather than a semantic role (gain-curve baseline, scatter-regression curve, roc-curve second model, bland-altman LoA lines) are left on lavender — they don't trip the semantic "red = bad" trap. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
MarkusNeusinger
added a commit
that referenced
this pull request
May 27, 2026
Positional hex + rgba replacement across 135 altair impls with light+dark renders. Stage A's rgba pass keeps the outline/fill pattern clean from the start (same approach as #7783 for bokeh). Proactive semantic-anchor fixes for 14 altair impls where slot-1 (now lavender) or slot-5 (now red) carried explicit meaning: - bar-diverging NEGATIVE_COLOR → red - candlestick-volume BEARISH → red - dashboard-metrics-tiles WARN_COLOR→amber, CRIT_COLOR→red - gauge-basic ZONE_BAD/WARN/GOOD → red/amber/green - kagi-basic YIN_COLOR → red - ohlc-bar DOWN_COLOR → red - point-and-figure-basic BEAR_COLOR → red - renko-basic BEARISH → red - shap-waterfall POS_COLOR → red - slope-basic COLOR_DECREASE → red - span-basic SPAN2_COLOR → amber (warning threshold) - waterfall-basic NEGATIVE_COLOR → red - map-marker-clustered IMPRINT list → canonical slot order SECONDARY constants that mark a *categorical second series* rather than a semantic role (gain-curve baseline, scatter-regression curve, roc-curve second model, bland-altman LoA lines) are left on lavender — they don't trip the semantic "red = bad" trap. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
squarifyadded to[plotting]extra (was the last spec to fail Stage B during the seaborn pass — needed bytreemap-basic/seaborn.py).Semantic fixes (proactive)
bar-diverging, candlestick-volume, dashboard-metrics-tiles (traffic-light + UNFAVORABLE), gain-curve (perfect-line not red), gauge-basic, horizon-basic (red ramp restored), indicator-macd, kagi-basic, point-and-figure-basic, renko-basic, shap-waterfall, slope-basic, waterfall-basic.
Test plan
ruff check .+ format green🤖 Generated with Claude Code