【发布时间】:2020-08-14 16:18:58
【问题描述】:
我有一个 R 包作为 GUI (JASP) 的后端引擎。我希望能够让人们将他们的图像转换为灰度(用于出版物印刷)。对于大多数绘图,我可以使用scale_colour_grey(),但是当在 stats_summary 中指定颜色时,这不起作用。例如:
# simulate data
set.seed(1212)
y = rnorm(100)
g = sample(c("a", "b"), 100, T)
d = data.frame(y=y, g=g)
### create ggplot
plot = ggplot(data=d, aes(x=g, y=y)) +
geom_jitter() +
stat_summary(fun="mean", geom="point", size=3, color="red") +
stat_summary(geom="errorbar", size=3, color="red") +
theme_bw()
### converting to greyscale doesn't work
plot + scale_colour_grey()
经过一番研究,我了解到您可以剖析 ggplot 对象然后重建它:
### can rebuilt ggplot object, but not ideal
q <- ggplot_build(plot)
q$data[[2]]$colour <- "black"
q$data[[3]]$colour <- "black"
q <- ggplot_gtable(q)
plot = ggplotify::as.ggplot(q)
plot
这很好,但我尝试在我的 R 包中包含尽可能少的依赖项。我真的必须求助于另一个包 (ggplotify) 来修改来自 stat_summary 的颜色吗?
一些注意事项:我不想修改原始的 stat_summary 语句。让我们假设无法修改。另外,假设我不能添加另一个包(除了已经加载的 ggplot2)。请记住,我是 JASP 框架中的“客人”,我不想将另一个包添加到他们必须存储的包列表中。
【问题讨论】:
-
只需从
stat_summary中删除color = "red"并将其放入初始调用ggplot(data=d, aes(x=g, y=y, color="red"))。像这样其他层(geom_*或scale_*)将继承它。 -
感谢您的评论,但这不是一个选项。同样,我不能修改现有的情节。 (无论如何,它在我的情况下不起作用......我不想修改点颜色,只是来自 stat_summary 的颜色)。