Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

get_fill_color as a string doesn't generate a legend #96

Open
MikeLydeamore opened this issue Apr 6, 2023 · 1 comment
Open

get_fill_color as a string doesn't generate a legend #96

MikeLydeamore opened this issue Apr 6, 2023 · 1 comment
Labels
feature New feature or request

Comments

@MikeLydeamore
Copy link

Passing a string instead of an accessor into get_scatterplot_layer doesn't seem to produce a legend, even when visible = TRUE is enabled.

I can bypass this by creating a dummy column that is the same for every row in the object, and then using scale_color_* but this feels like a bit of a clunky workaround.

An example of the map I would expect to see a fill legend for:

library(rdeck)
library(dplyr)
library(sf)
library(absmapsdata)

shp <- sa32016 %>%
  filter(gcc_name_2016 == "Greater Melbourne") |>
  group_by(sa3_code_2016) |>
  mutate(
    centroid = st_centroid(geometry)
  )

rdeck(
  map_style = mapbox_dark(),
  # set the bounds of the map to include all of the manhattan data
  initial_bounds = st_bbox(shp),
  # add a 2 pixel buffer to each point, making it easier to hover
  picking_radius = 2
) |>
  add_polygon_layer(
    data = shp,
    get_polygon = geometry,
    filled = TRUE,
    opacity = 0.1,
    stroked = TRUE,
    get_line_color = "#663399ff",
    line_width_units = "pixels",
  ) |>
  add_scatterplot_layer(
    data = shp,
    get_position = centroid,
    get_radius = 200,
    get_fill_color = "#ffffff",
    visible = TRUE,
    radius_min_pixels = 5
  )

The workaround is to change get_fill_color to:

get_fill_color = cale_color_category(
        col = state_name_2016,
        palette = c("#ffffff")
      )

I understand the normal use case for a string in get_fill_color is probably a useless single-valued legend. My use case is controlling several very similar layers with shiny that have each dataset on it's own layer (for individual toggling) and so the ability to create a "manual" legend would be very useful.

@anthonynorth
Copy link
Member

Ideally, I think what you would want to use is an in-javascript filter on a single layer? That's planned, but I don't have a timeframe for it yet.

Manual legends aren't totally useless and I agree that adding a dummy constant and using a category scale is clunky (it also adds bloat).

I think manual legends are related to aggregation legends (also not available yet) --- workaround there is to create a dummy layer, which is a hack.

I think something like this for the api for both could work:

color <- function(color, legend=TRUE) {}
color_range <- function(palette, legend=TRUE) {}

@anthonynorth anthonynorth added the feature New feature or request label Apr 28, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants