r-使用map2时如何设置y轴限制(~ggplot



使用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错误:二进制运算符的非数字参数

.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), ...)的简写。

这不基于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))
    }
)

最新更新