R 图例中未使用的标高在ggplotly()中消失

R 图例中未使用的标高在ggplotly()中消失,r,ggplot2,plotly,R,Ggplot2,Plotly,通过在scale\u fill\u manual()函数中使用drop=FALSE选项,我可以包含所有图例标签,甚至包括数据中未使用的标签。下面是一个这样工作的例子。在下面的示例中,数据中不存在计数>33的情况;但是,仍有一个图例标签“33+”: library(plotly) 图书馆(GG2) 图书馆(RColorBrewer) 种子(1) x=绝对值(rnorm(100)) y=绝对值(rnorm(100)) 值=runif(100,1,30) myData对此有一个解决方案,这可能表明目前

通过在scale\u fill\u manual()函数中使用drop=FALSE选项,我可以包含所有图例标签,甚至包括数据中未使用的标签。下面是一个这样工作的例子。在下面的示例中,数据中不存在计数>33的情况;但是,仍有一个图例标签“33+”:

library(plotly)
图书馆(GG2)
图书馆(RColorBrewer)
种子(1)
x=绝对值(rnorm(100))
y=绝对值(rnorm(100))
值=runif(100,1,30)

myData对此有一个解决方案,这可能表明目前没有内置的修复程序。如果您不介意采用黑客方式,您可以根据相同的结构将自己的列表附加到
ip$x$data
,并具有
mylist$legendgroup=“33+”
mylist$name=“33+
有一个用于此的列表,这可能表明目前没有内置的修复程序。如果您不介意使用黑客方式,您可以根据相同的结构将自己的列表附加到
ip$x$data
中,并具有
mylist$legendgroup=“33+”
mylist$name=“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
ip <- ggplotly(sp)
ip