[英]How to use a non-default colorscale in R plotly chloropleth maps?
我正在使用 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)
}
我無權訪問您的數據。 所以我決定使用 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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.