在图中用按钮对数据进行多次更改

时间:2018-06-13 16:18:36

标签: r plotly r-plotly

我使用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")
                )
            )
        )
    )

0 个答案:

没有答案