使用purrr::map2
时如何在每个图中设置不同的y轴限制?
我想将y轴下限设置为最大y轴值的一半,例如:max(y-axis value/2)
。
data(mtcars)
library(tidyverse)
mtcars_split <-
mtcars %>%
split(mtcars$cyl)
plots <- map2(
mtcars_split,
names(mtcars_split),
~ggplot(data = .x, mapping = aes(y = mpg, x = wt)) +
geom_jitter() +
ggtitle(.y)+
scale_y_continuous(limits=c(max(.y)/2,NA))
)
plots
max(.y)/ 2中的错误:二进制运算符的非数字参数
答案 0 :(得分:3)
.y
是数据框的名称,这就是max(.y)/2
给您该错误的原因。这应该给您您想要的东西:
plots <- imap(
mtcars_split,
~ggplot(data = .x, mapping = aes(y = mpg, x = wt)) +
geom_jitter() +
ggtitle(.y) +
scale_y_continuous(limits=c(max(.x$mpg)/2,NA))
)
请注意,imap(x, ...)
只是map2(x, names(x), ...)
的简写。
答案 1 :(得分:2)
这不适用于y轴值,但是如果您不介意两次指定y列,则可以完成工作:
plots <- map2(
mtcars_split,
names(mtcars_split),
~ggplot(data = .x, mapping = aes(y = mpg, x = wt)) +
geom_jitter() +
ggtitle(.y)+
scale_y_continuous(limits=c(max(.x$mpg)/2,NA))
)
或更安全的选择:
plots <- map2(
mtcars_split,
names(mtcars_split),
~{
ploty <- 'mpg'
plotx <- 'wt'
ggplot(data = .x, mapping = aes_string(y = ploty, x = plotx)) +
geom_jitter() +
ggtitle(.y)+
scale_y_continuous(limits=c(max(.x[[ploty]])/2,NA))
}
)