如何在R绘制的氯色图中使用非默认色标?

问题描述 投票:1回答:1

我正在使用Plotty在R中创建一个chloropleth贴图,唯一的麻烦是设置了不同的色标。我想使用viridis软件包中的岩浆色标,但似乎无法找出正确的方法。我曾尝试使用Google搜索和搜索功能,但没有任何答案。有人有什么建议吗?

我得到的错误是:“ unique()仅适用于向量。”我尝试设置“离散= 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个回答
0
投票

我无权访问您的数据。因此,我决定使用plotly包中的教程数据来演示如何使用绿色。

连续变数

[如果您阅读了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)

enter image description here

分类变量

发布我的答案后,我以为您使用的是分类变量。我研究了这个示例,并认为用这样的变量来绘制一个chloropleth贴图是很棘手的。至少,我可以基于类别变量将颜色分配给多边形,但是颜色栏会以一种有趣的方式出现。所以我删除了它。 (如果有人可以改进此部分,请这样做。)

使用相同的数据,我做了以下工作。我在dplyr包中使用ntile()创建了一个类别变量。我在total.exports中随机创建了9个关卡。然后,我用magma()创建了9种颜色。当我绘制下面的地图时,我使用了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)

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.