I维护一个使用GGPLOT2显示脑成像数据的R软件包。该软件包从根本上取决于ggnewscale
以及重新使用填充映射的多个覆盖的填充映射的能力。随着GGPLOT2 3.5的发布,这种方法一直效果很好,直到最近。一些用例涉及覆盖多个分类图像,我想在传说中保留未使用的因子水平。以前,这可以在
drop=FALSE
规范中使用
scale_fill_*
来实现。它也仅取决于我想隐藏的传奇和not
设置
show.legend
的图层。 (请参阅Https://github.com/eliocamp/ggnewscale/issues/32) 以GGPLOT2 3.5的发布,我现在预计将设置
FALSE
维持未使用的因子水平。结果,我无法再实现预期的显示,因为构建中的后期层不适当下层的设置,从而导致全黑传奇没有任何意义。
我已经在对象上戳了一下(例如,使用show.legend=TRUE
),我看到了许多差异,但是我不知道什么区别会导致错误。有人对如何识别和修补GGPLOT对象有建议以产生所需的结果吗? (另请参见:Https://github.com/eliocamp/ggnewscale/issues/59)我已经附加了一个简单的reprex。非常感谢您的任何建议!
show.legend=TRUE
gginnards
data1 <- expand.grid(dim1=1:10, dim2=1:10)
data1$value1 <- rnorm(100)
data2 <- expand.grid(dim1=1:10, dim2=1:10)
data2$value2 <- factor(sample(c(NA, "f1", "f2", "f3", "f4"), size = 100, replace=TRUE), levels = paste0("f", 1:5))
data3 <- expand.grid(dim1=1:10, dim2=1:10)
data3$value3 <- factor(sample(c(NA, "i1", "i2", "i3", "i4"), size = 100, replace=TRUE), levels = paste0("i", 1:5))
# leaving as NA shows the right layers in legend, but the missing level is not plotted
# https://github.com/tidyverse/ggplot2/issues/5728
ggplot(mapping=aes(x=dim1, y=dim2)) +
geom_raster(data=data1, mapping=aes(fill=value1), show.legend = FALSE) +
scale_fill_gradient(low = "grey8", high = "grey92") +
ggnewscale::new_scale_fill() +
geom_raster(data=data2, mapping=aes(fill=value2), show.legend=NA) +
scale_fill_brewer("layer2", palette = "Set3", drop=FALSE, na.value = "transparent", na.translate=FALSE) +
ggnewscale::new_scale_fill() +
geom_raster(data=data3, mapping=aes(fill=value3), show.legend = NA) +
scale_fill_brewer("layer3", palette = "Dark2", drop=FALSE, na.value = "transparent", na.translate=FALSE)
如果我正确理解您,您可以通过更具体地说明每个地理的传说中应显示哪些美学,即Set设置最后一层的
fill=FALSE