我在使用viridis调色板绘制图例的颜色时遇到问题:尽管图例标签是,但颜色不会显示。
我在Ubuntu下测试了相同的代码Shiny Server v1.4.2.786
Node.js v0.10.40
(它没有显示viridis颜色)和MacOS下(它确实正确)。
Ubuntu R会话的详细信息:
R version 3.3.1 (2016-06-21)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 15.10
leaflet_1.0.1 shiny_0.13.2 viridis_0.3.4
这是不显示颜色的图例
leaflet() %>% addTiles() %>% addLegend(
position = 'bottomright',
colors = viridis(8),
labels = viridis(8), opacity = 1)
虽然这也适用于Ubuntu机器
leaflet() %>% addTiles() %>% addLegend(
position = 'bottomright',
colors = rgb(t(col2rgb(palette())) / 255),
labels = palette(), opacity = 1)
这似乎是viridis调色板的颜色代码的问题(我尝试在字符向量中复制/粘贴它们)。
一个工作示例
library(shiny)
library(leaflet)
library(viridis)
r_colors <- rgb(t(col2rgb(colors()) / 255))
names(r_colors) <- colors()
ui <- fluidPage(
leafletOutput("mymap")
)
server <- function(input, output, session) {
output$mymap <- renderLeaflet({
leaflet() %>% addTiles() %>% addLegend(
position = 'bottomright',
colors = viridis(8),
labels = viridis(8), opacity = 1)
})
}
shinyApp(ui, server)
答案 0 :(得分:1)
这与#xxxxxxFF
调色板的Alpha通道viridis
有关。在为{strong> mapview 包创建viridis
默认调色板时,我遇到了同样的问题。我写了一个小功能来解决这个问题。该功能未导入命名空间,因此您只能通过mapview:::col2Hex
访问该功能。它被定义为:
function(col, alpha = FALSE) {
mat <- grDevices::col2rgb(col, alpha = TRUE)
if (alpha) {
hx <- grDevices::rgb(mat[1, ]/255, mat[2, ]/255,
mat[3, ]/255, mat[4, ]/255)
} else {
hx <- grDevices::rgb(mat[1, ]/255, mat[2, ]/255, mat[3, ]/255)
}
return(hx)
}
,可以找到来源here。
这样,您的代码就可以运行。
leaflet() %>% addTiles() %>% addLegend(
position = 'bottomright',
colors = mapview:::col2Hex(viridis(8)),
labels = mapview:::col2Hex(viridis(8)), opacity = 1)
尝试将alpha设置为TRUE
,但最终没有颜色:
leaflet() %>% addTiles() %>% addLegend(
position = 'bottomright',
colors = mapview:::col2Hex(viridis(8), alpha = TRUE),
labels = mapview:::col2Hex(viridis(8), alpha = TRUE), opacity = 1)
答案 1 :(得分:1)
传单的开发版现在支持viridis调色板。 https://github.com/rstudio/leaflet/pull/364
答案 2 :(得分:0)
我正在运行一台14.04LTS的Ubuntu机器。我能够获得图例上的颜色,但看起来颜色没有在colors()函数中列出,并且传说标签仍然是十六进制代码。
这部分代码应该检索颜色名称:
colors()[match(rgb(t(col2rgb(leafletColors)),
maxColorValue = 255), c(rgb(t(col2rgb(colors())), maxColorValue = 255)))]
修改后的app.R代码
library(shiny)
library(leaflet)
library(viridis)
r_colors <- rgb(t(col2rgb(colors()) / 255))
names(r_colors) <- colors()
leafletColors <- palette(viridis(8))
ui <- fluidPage(
leafletOutput("mymap"),
p(),
actionButton("recalc", "New points")
)
server <- function(input, output, session) {
points <- eventReactive(input$recalc, {
cbind(rnorm(40) * 2 + 13, rnorm(40) + 48)
}, ignoreNULL = FALSE)
output$mymap <- renderLeaflet({
leaflet() %>%
addProviderTiles("Stamen.TonerLite",
options = providerTileOptions(noWrap = TRUE)
) %>%
addMarkers(data = points()) %>%
addLegend(
position = 'bottomright',
colors = leafletColors,
labels = palette(), opacity = 1)
})
}
shinyApp(ui, server)
让我知道这有用......