我使用plotly
中的R
包创建了一个婴儿名称的等值区,其中的按钮可以使用过滤器转换在男孩和女孩之间切换数据。当点击一个按钮时,我希望它也能改变使用的色阶:男孩的“GnBu”和女孩的“PuRd”。如何在单击按钮时更改按钮的代码以使颜色随着变换一起变化?
数据:
df <- structure(list(code = c("AK", "WI", "WY", "AK", "AL", "AL", "AR",
"AR", "AZ", "AZ", "CA", "CA", "CO", "CO", "CT", "CT", "DC", "DC",
"DE", "DE", "FL", "FL", "GA", "GA", "HI", "HI", "IA", "IA", "ID",
"ID", "IL", "IL", "IN", "IN", "KS", "KS", "KY", "KY", "LA", "LA",
"MA", "MA", "MD", "MD", "ME", "ME", "MI", "MI", "MN", "MN", "MO",
"MO", "MS", "MS", "MT", "MT", "NC", "NC", "ND", "ND", "NE", "NE",
"NH", "NH", "NJ", "NJ", "NM", "NM", "NV", "NV", "NY", "NY", "OH",
"OH", "OK", "OK", "OR", "OR", "PA", "PA", "RI", "RI", "SC", "SC",
"SD", "SD", "TN", "TN", "TX", "TX", "UT", "UT", "VA", "VA", "VT",
"VT", "WA", "WA", "WI", "WV", "WV", "WY"), sex = c("F", "F",
"M", "M", "F", "M", "F", "M", "F", "M", "F", "M", "F", "M", "F",
"M", "F", "M", "F", "M", "F", "M", "F", "M", "F", "M", "F", "M",
"F", "M", "F", "M", "F", "M", "F", "M", "F", "M", "F", "M", "F",
"M", "F", "M", "F", "M", "F", "M", "F", "M", "F", "M", "F", "M",
"F", "M", "F", "M", "F", "M", "F", "M", "F", "M", "F", "M", "F",
"M", "F", "M", "F", "M", "F", "M", "F", "M", "F", "M", "F", "M",
"F", "M", "F", "M", "F", "M", "F", "M", "F", "M", "F", "M", "F",
"M", "F", "M", "F", "M", "M", "F", "M", "F"), us_rank = c(1L,
1L, 2L, 9L, 5L, 7L, 1L, 14L, 1L, 2L, 1L, 4L, 1L, 2L, 3L, 4L,
5L, 9L, 3L, 10L, 6L, 2L, 5L, 7L, 1L, 2L, 28L, 15L, 1L, 15L, 3L,
4L, 1L, 15L, 1L, 15L, 1L, 7L, 3L, 2L, 1L, 11L, 5L, 2L, 18L, 15L,
1L, 2L, 3L, 15L, 3L, 7L, 5L, 7L, 3L, 9L, 5L, 7L, 1L, 15L, 1L,
15L, 18L, 10L, 1L, 2L, 13L, 4L, 1L, 2L, 3L, 2L, 1L, 2L, 1L, 7L,
1L, 15L, 1L, 2L, 18L, 17L, 5L, 7L, 1L, 15L, 5L, 7L, 1L, 4L, 3L,
15L, 3L, 2L, 26L, 37L, 3L, 2L, 29L, 1L, 2L, 1L)), class = c("tbl_df",
"tbl", "data.frame"), row.names = c(NA, -102L))
代码:
library(magrittr)
library(plotly)
geo_opts <- list(
scope = 'usa',
projection = list(type = 'albers usa'),
showlakes = FALSE
)
plot_geo(df, locationmode = 'USA-states') %>%
add_trace(., type = "choropleth",
z = ~us_rank, locations = ~code, color = ~us_rank,
transforms = list(
list(
type = "filter",
target = ~sex,
operation = "=",
value = c("M", "F")
)
)
) %>%
layout(
geo = geo_opts,
updatemenus = list(
list(
type = 'buttons',
active = 0,
buttons = list(
list(method = "restyle",
args = list("transforms[0].value", "M"),
label = "Boy"),
list(method = "restyle",
args = list("transforms[0].value", "F"),
label = "Girl")
)
)
)
)