通过在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还有很多其他问题。但是这个特别的问题是我唯一关注的问题!谢谢你的任何建议!