图例中未使用的级别在ggplotly()中消失

时间:2017-08-03 15:10:17

标签: r ggplot2 plotly

通过在scale_fill_manual()函数中使用drop = FALSE选项,我可以包含所有图例标签 - 甚至是数据中未使用的标签。下面是一个工作的例子。在下面的例子中,数据中没有数据> 33的情况;但是,仍然有一个传奇标签“33 +”:

$("#owl-featured").owlCarousel({
    nav: true,
    navContainer: '.owl-buttons',
    dotData: true,
    dotsContainer: '.owl-pagination',
    dotClass: 'owl-page',
    stageOuterClass: 'owl-wrapper-outer',
    stageClass: 'owl-wrapper',
    navContainerClass: 'owl-controls',
    navText : ['prev','next'],
    items : 3,
    itemsDesktop : [1440,3],
    itemsDesktopSmall : [1024,3],
    itemsTablet: [768,2],
    itemsTabletSmall: [719,1],
    itemsMobile : [479,1]
});

然而,当我尝试使用ggplotly()将此静态图转换为交互式图时,该图例标签“33+”消失了:

library(plotly)
library(ggplot2)
library(RColorBrewer)

set.seed(1)
x = abs(rnorm(100))
y = abs(rnorm(100))
value = runif(100, 1, 30)

myData <- data.frame(x=x, y=y, value=value)

lowVal <- c(1,3,5,9,17,33)
getInterval <- function(input){
  for (i in length(lowVal):1){
    if (input >= lowVal[i]){
      ret = lowVal[i]
      break()
    }
  }
  ret
}
myData$valueColor  <- sapply(myData$value, function(x) getInterval(x))
myData$valueColor = factor(myData$valueColor,levels=lowVal,ordered=TRUE)

for (i in 1:(length(lowVal)-1)){
  levels(myData$valueColor)[i] <- paste0(lowVal[i],"-",lowVal[i+1]-1)
}
levels(myData$valueColor)[length(lowVal)] <- paste0(lowVal[length(lowVal)], "+")

my_breaks = levels(myData$valueColor)
clrs <- brewer.pal(length(my_breaks)+3, "Purples")
clrs <- clrs[3:length(clrs)]

# Static plot
sp <- ggplot(myData, aes(x=x, y=y, counts=value, fill=valueColor)) + geom_area(stat="identity") + scale_fill_manual(labels = as.character(my_breaks), values = rev(clrs), name = "Cases count", drop = FALSE) + coord_fixed(ratio=1)
sp

是否可以通过ggplotly()保留图例标签中所有未使用的级别?

旁注:这个MWE还有很多其他问题。但是这个特别的问题是我唯一关注的问题!谢谢你的任何建议!

0 个答案:

没有答案