Open mkfreeman opened 2 years ago
related: #6 #7 #114 #253 #397 #662
Would love to help work on this however I can!
The new axis mark #1197 will help with this, for example you could have a ggplot2 theme https://github.com/observablehq/plot/pull/1197#issuecomment-1364573933.
Also relevant: https://observablehq.com/@observablehq/custom-plot-themes
Here's a handy response from Mike on the user forum: https://talk.observablehq.com/t/set-global-plot-defaults-for-observable-plot/7797/3
As a Plot user, that feature would be very useful! Here is also another R package that was relevant to style graphs from a former Airbnb DS - https://github.com/ricardo-bion/ggtech
Textures #903
I like Mike’s nice style: Plot.themes.dark
suggestion. And it could be prototyped as an ongoing notebook.
It gets trickier when you want to set a default theme across many plots. One can also imagine wanting to set default categorical/sequential/diverging color schemes, etc.
Maybe there could be something like
Plot.defaults({
style: Plot.themes.dark,
color: {scheme: {sequential: "blues"}}
})
which would return a new instance of Plot with those defaults? There’d be various difficulties. What’s that object syntax? (Note that I abused the color scheme option.) To name your version Plot in a notebook, would you have to do something like Plot = (await require("@observablehq/plot")).defaults({style: Plot.themes.dark})
, or could you take advantage of the built-in Plot?
Yes, exactly Toph. On Observable, my hope is that you can configure Plot for your workspace and it automatically applies the theme to notebooks in your workspace without you having to edit them. And likewise in vanilla JavaScript, you could call export default Plot.defaults(…)
or whatever and import that instead of Plot.
Projections! (suggested in #1111)
Projections!
What about projections, @Fil? Not sure how this is related to themes.
In that comment I wanted a mechanism to add a few named projections to my "themed" or personalized Plot, similarly to the way we'll be able to add (or modify) color themes. Once we have a theming mechanism in place it will seem natural to want to extend it (progressively) to other hard-coded lists of named option values. Even more so if it's called "defaults" and not "theme".
Stumbled across this while trying to adjust my observable colors to my themes.
What about adding a new scheme for categorical color space along the following, using css variables:
export default [
'var(--plot-color-0)',
'var(--plot-color-1)',
'var(--plot-color-2)',
'var(--plot-color-3)',
'var(--plot-color-4)',
'var(--plot-color-5)',
'var(--plot-color-6)',
'var(--plot-color-7)',
'var(--plot-color-8)',
'var(--plot-color-9)',
]
It would then be the consumer responsibility to set relevant colors - we could provide a helper so that it uses observable10
scheme by default. Handling dark, and customized theme is then pretty easy.
Happy to provide a PR if that makes sense
To support different styles, we could create a set of plot themes (e.g.,
dark
,light
, etc.). As a comparison, theggthemes
package has default styles to emulate popular styles like the Wallstreet Journal, FiveThirtyEight, etc.Perhaps a simple approach would be to define a set of styles in
Plot.themes
that could be set as thestyle
property in a Plot:Where
Plot.themes.dark
has a set of key/value pairs describing the style:{background: "black", color: "white",...}