使用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中的错误:二进制运算符的非数值参数
发布于 2018-11-15 01:15:25
这不能基于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))
}
)
发布于 2018-11-15 01:16:51
.y
是dataframe的名称,这就是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), ...)
的缩写。
https://stackoverflow.com/questions/53310950
复制相似问题