plot
plot copied to clipboard
Themes
To support different styles, we could create a set of plot themes (e.g., dark
, light
, etc.). As a comparison, the ggthemes
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 the style
property in a Plot:
Plot.plot({
style: Plot.themes.dark
})
Where Plot.themes.dark
has a set of key/value pairs describing the style: {background: "black", color: "white",...}
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?
- https://ggplot2.tidyverse.org/reference/theme_get.html
- https://vega.github.io/vega-lite/docs/config.html
- For the Observable context, also related to the idea of custom stdlibs
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".