Repository navigation
fix: move Tableau colormaps to their own namespace, fix catalog metadata - #166
Merged
Merged
Conversation
- tableau colormaps were mistakenly in the 'seaborn' namespace (a copy-paste of the seaborn record, including its placeholder info); they're now 'tableau:*', and the old 'seaborn:tab*' names still work as aliases - describe each Tableau palette and where it comes from; tab20b/tab20c are d3's, not Tableau's - seaborn: real author and description instead of placeholders - cmocean, cubehelix: fill in empty authors - ibm, paraview, petroff: add their licenses (matching REUSE.toml / upstream) - catalog: a short name that's already an alias for the same colormap is not a conflict Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #166 +/- ##
=======================================
Coverage 94.62% 94.62%
=======================================
Files 168 168
Lines 2231 2232 +1
=======================================
+ Hits 2111 2112 +1
Misses 120 120 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
Only the Tableau 10 / Tableau 20 attributions are backed by Tableau's own sources; all of Tableau's palettes were redesigned in Tableau 10 (2016), so it's not known which version the others are. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- REUSE.toml: drop the BSD-3-Clause override for tableau (no known license) - per-colormap tableau authors (only where known); 2004 is when the palettes were designed, not when Tableau 1.5 shipped; 'nearly identical to' where the d3/matplotlib values differ slightly - test that actually catches the alias self-conflict (it's logged, not warned) - don't share one dict between an alias's short and namespaced names Co-Authored-By: Claude Opus 5.5 <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.
The tableau colormaps (
tab10,tab20, etc) have been living in theseabornnamespace this whole time. Turns out that was just a copy-paste error from when I converted the data modules torecord.jsonfiles in 6410b81...tableau/record.jsoncopied itsinfo,licenseandnamespacefromseaborn/record.json, which was itself still a placeholder template ("info": "This is a test dataset","authors": ["John Doe"]😂). The authors and source were already Tableau's. The old_tableau.pyit replaced had nothing to do with seaborn (it said__license__ = "UNKNOWN"). The only real connection is that seaborn's default palettes are variations on matplotlib'stab10.This came up while building per-collection pages for the new docs (#165), where all of that placeholder stuff was suddenly very visible.
tableau:*. The oldseaborn:tab*names are kept as aliases, so nothing breaks, and plaintab10etc. still resolve to the same colors.info, and I only attributed what Tableau's own sources back up: Maureen Stone designed the basic palettes in 2004 for Tableau 1.5 (her bio),tab10_newis the 2016 "Tableau 10" redesign by Stone and Cristy Miller, and Tableau 20 is light/dark pairs of the Tableau 10 hues (blog post). The post also says they redesigned all of the old palettes for Tableau 10, so for Color Blind 10, Traffic Light and Tableau 10 Light/Medium I don't know which version we have, and the descriptions just name them (and they no longer list authors).tab20b/tab20care described as d3'scategory20b/category20c(which is also what matplotlib'stab20b/tab20care, "from Vega"). I couldn't find who designed those.BSD-3-Clause(copied from seaborn, and also in REUSE.toml). As far as I can tell Tableau has never published a license for these, so it'sUNKNOWN, and REUSE.toml now treats it like okabeito and matlab.[""].Two small catalog fixes were needed for the aliases. Since the seaborn record loads before the tableau one,
tab10ended up registered as conflicting with... itself, and plainColormap("tab10")would log the "is also available as" warning. A short name that's already an alias for the same colormap is no longer counted as a conflict. And an alias's short and namespaced names no longer share one dict (otherwise a future conflict ontab10would also show up onseaborn:tab10).fwiw, one user-visible change:
Colormap("tab10").name(and sorepr,as_dict(), pydantic serialization, etc) is now"tableau:tab10"rather than"seaborn:tab10". Anything saved with the old name still loads, but something saved with this version won't load in an older cmap.Not touched here: a couple of the color values differ by 1 in a channel from other sources.
tab10_colorblind[1]is#FF8000here vs#FF800Ein matplotlib'stableau-colorblind10style, andtab10_newhas#F28E2B/#59A14Ewhere d3'sschemeTableau10has#F28E2C/#59A14F(hence "nearly identical to" in the descriptions). I couldn't find anything authoritative from Tableau to say which is right (the blog post only shows them as images), so I left the data alone.🤖 Generated with Claude Code