用GGPLOT2 3.5.0+

问题描述 投票:0回答:1

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

Image with gray for missing levels 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)

Image with incorrect black legend

如果我正确理解您,您可以通过更具体地说明每个地理的传说中应显示哪些美学,即Set

Same image with black legend# if I provide show.legend=TRUE as now recommended in ggplot2 3.5.0+, it undermines the lower layers ggplot(mapping=aes(x=dim1, y=dim2)) + geom_raster(data=data1, mapping=aes(fill=value1), show.legend = FALSE) + # will become fill_ggnewscale_2 scale_fill_gradient(low = "grey8", high = "grey92") + ggnewscale::new_scale_fill() + geom_raster(data=data2, mapping=aes(fill=value2), show.legend=TRUE) + scale_fill_brewer("layer2", palette = "Set3", drop=FALSE, na.value = "transparent", na.translate=FALSE) + # will become fill_ggnewscale_1 ggnewscale::new_scale_fill() + geom_raster(data=data3, mapping=aes(fill=value3), show.legend = TRUE) + scale_fill_brewer("layer3", palette = "Dark2", drop=FALSE, na.value = "transparent", na.translate=FALSE) 对于前两个,将其重命名为the the the the。

设置最后一层的
ggplot2 ggnewscale
1个回答
0
投票
。我进行了一些实验,至少在您的例子中,似乎并不重要。

fill=FALSE
  • 
        
    	
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.