【问题标题】:How to use a non-default colorscale in R plotly chloropleth maps?如何在 R plotly choropleth 地图中使用非默认色标?
【发布时间】:2019-12-25 18:27:55
【问题描述】:

我正在使用 plotly 在 R 中创建一个叶绿素图,我遇到的唯一问题是设置不同的色阶。我想使用 viridis 包中的岩浆色阶,但我似乎无法找出正确的方法。我试过谷歌搜索和搜索,但没有答案很有效。有人有什么建议吗?

我得到的错误是:“unique() 仅适用于向量。” 我尝试过设置“discrete = TRUE”,但这不起作用。

如果您需要更多信息,请告诉我。

create_cw_map <- function(data, color_var) {
  if (is.null(data))
    return(NULL)

  g <- list(scope = "usa",
           projection = list(type = "albers usa"),
           showlakes = FALSE)

  cw_map <- plot_geo(data,
                     locationmode = "USA-states") %>%
            add_trace(z = ~ get(color_var),
                      locations = ~ state,
                      color = ~ get(color_var),
                      colorscale =  scale_fill_viridis(option = "magma")) %>%
            colorbar(title = color_var) %>%
            layout(geo = g)

            print(cw_map)
}

【问题讨论】:

    标签: r colors maps plotly viridis


    【解决方案1】:

    我无权访问您的数据。所以我决定使用 plotly 包中的教程数据来演示如何使用 viridis 颜色。

    连续变量

    如果您阅读 plot_ly() 的帮助页面,您会看到 colors 被指定为 colorbrewer2.org 调色板名称(例如“YlOrRd”或“Blues”),或以十六进制插值的颜色向量"#RRGGBB" 格式,或 colorRamp() 等颜色插值函数。您可以做的是使用 viridisLite 包中的magma() 创建一个颜色矢量。这里我指定了colors = magma(50, alpha = 1, begin = 0, end = 1, direction = 1)。 n = 50 表示我想要颜色向量中有 50 种颜色。您想为自己的情况使用这个数字。

    library(dplyr)
    library(viridis)
    library(plotly)
    
    df <- read.csv("https://raw.githubusercontent.com/plotly/datasets/master/2011_us_ag_exports.csv")
    df$hover <- with(df, paste(state, '<br>', "Beef", beef, "Dairy", dairy, "<br>",
                           "Fruits", total.fruits, "Veggies", total.veggies,
                           "<br>", "Wheat", wheat, "Corn", corn))
    
    # give state boundaries a white border
    l <- list(color = toRGB("white"), width = 2)
    
    # specify some map projection/options
    g <- list(scope = 'usa',
              projection = list(type = 'albers usa'),
              showlakes = TRUE,
              lakecolor = toRGB('white'))
    
    p <- plot_geo(df, locationmode = 'USA-states') %>%
           add_trace(z = ~total.exports,
                     text = ~hover,
                     locations = ~code,
                     color = ~total.exports,
                     colors = magma(50, alpha = 1, begin = 0, end = 1, direction = 1)) %>%
           colorbar(title = "Millions USD") %>%
           layout(title = '2011 US Agriculture Exports by State<br>(Hover for breakdown)',
                  geo = g)
    

    分类变量

    发布我的答案后,我以为您使用的是分类变量。我玩了这个例子,并认为在情节中创建一个带有这样一个变量的叶绿素图是很棘手的。至少,我可以根据分类变量为多边形分配颜色,但是颜色条以一种有趣的方式出现。所以我删除了它。 (如果有人可以改进这部分,请这样做。)

    使用相同的数据,我做了以下事情。我在 dplyr 包中使用 ntile() 创建了一个分类变量。我在total.exports 中随机创建了 9 个关卡。然后,我使用magma() 创建了九种颜色。当我绘制下面的地图时,我使用了colors = foo[df$export_nth]。这基本上是使用foo 创建 50 种颜色。 export_nth 用作索引号。我希望这能帮助您思考如何解决您的问题。

    mutate(df, export_nth = ntile(x = total.exports, n = 9)) -> df
    
    # Create a magma color vector
    
    foo <- magma(n = 9, alpha = 1, begin = 0, end = 1, direction = 1)
    
    p <- plot_geo(df, locationmode = 'USA-states') %>%
         add_trace(z = ~export_nth,
                   text = ~hover,
                   locations = ~code,
                   colors = foo[df$export_nth],
                   color = ~export_nth,
                   showscale = FALSE) %>%
         layout(title = '2011 US Agriculture Exports by State<br>(Hover for breakdown)',
                geo = g)
    

    【讨论】:

    • 谢谢!这解决了我的问题等等。我正要提出第二个问题,关于如何使用带有分类数据的绘图地图,但这可以解决问题。
    • 你知道如何将图例放入剧情吗?
    • 如果有人仍在寻找映射分类变量的解决方案,可以在此处找到一个很好的示例:analytics-tuts.com/… FYI - 该页面上提供的默认代码有问题,但有一个链接到底部的 GH 存储库,其中包含工作代码。您还需要重新创建 states 数据框,因为它们不提供 states.csv。
    猜你喜欢
    • 2021-07-11
    • 1970-01-01
    • 1970-01-01
    • 2020-11-09
    • 1970-01-01
    • 2019-07-16
    • 2022-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多