如何在 R plotly 等值线图中使用非默认色标?
How to use a non-default colorscale in R plotly chloropleth maps?
我正在使用 plotly 在 R 中创建叶绿体图,我遇到的唯一麻烦是设置不同的色标。我想使用 viridis 包中的 magma colorscale,但我似乎无法找出正确的方法。我试过谷歌搜索和搜索,但没有任何答案是有效的。有人有什么建议吗?
我得到的错误是:"unique() only applies to vectors."
我试过设置 "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)
}
我无权访问您的数据。所以我决定使用 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)
分类变量
发布我的答案后,我以为您使用的是分类变量。我试过这个例子,认为在 plotly 中创建一个带有这样一个变量的叶绿体图是很棘手的。至少,我可以根据分类变量为多边形分配颜色,但颜色条以一种有趣的方式出现。所以我删除了它。 (如果有人可以改进这部分,请这样做。)
使用相同的数据,我做了以下操作。我在 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)
我正在使用 plotly 在 R 中创建叶绿体图,我遇到的唯一麻烦是设置不同的色标。我想使用 viridis 包中的 magma colorscale,但我似乎无法找出正确的方法。我试过谷歌搜索和搜索,但没有任何答案是有效的。有人有什么建议吗?
我得到的错误是:"unique() only applies to vectors." 我试过设置 "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)
}
我无权访问您的数据。所以我决定使用 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)
分类变量
发布我的答案后,我以为您使用的是分类变量。我试过这个例子,认为在 plotly 中创建一个带有这样一个变量的叶绿体图是很棘手的。至少,我可以根据分类变量为多边形分配颜色,但颜色条以一种有趣的方式出现。所以我删除了它。 (如果有人可以改进这部分,请这样做。)
使用相同的数据,我做了以下操作。我在 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)