如何使用purrr::map函数向stat qq图添加彩色线

6rqinv9w  于 2023-02-17  发布在  其他
关注(0)|答案(1)|浏览(147)

我使用stat qq图来表示任何给定变量的正态性。我希望用第二个变量对每个图进行着色,以便可以根据第一个变量的正态分布来查看第二个变量中每个因子水平的分布。当我逐个生成图时,我可以实现这一点。但是,我希望使用purrr::map来迭代一系列次要变量。我有四个次要变量,因此不希望将代码重复几次
我已经花了相当多的时间在网上查找,也通读了这里的问题和答案。
我使用下面的代码:按照示例数据创建一个可重现的示例,首先创建一个gglayers对象,它包含ggplot元数据,以避免在每个绘图中重复它

RSKPH2 <- data.frame(
release_speed_kph =c(87.42, 141.37, 133.41, 89.12, 96.64, 141.39, 137.16, 98.09, 144.22, 101.19),
batting_hand = c("left", "right", "right", "right", "right", "left", "right", "right", "left", "right"),
bowling_hand = c("right", "right", "left", "right", "left", "right", "right", "right", "left", "right"),
bowling_type = c("spin", "pace", "pace", "spin", "spin", "pace", "pace", "spin", "pace", "pace"),
wicket = c("Wicket", "No Wicket", "No Wicket", "Wicket", "No Wicket", "No Wicket", "Wicket", "No Wicket", "Wicket", "Wicket")
)
gglayers <- list(stat_qq(),
                 stat_qq_line(),
                 theme_classic2(),
                 theme(plot.title = element_text(hjust = 0.5)),
                 xlab("Theoretical Quantiles"),
                 ylab("Sample Quantiles"))

以下对象通知R每个图使用哪个标题:

RSKPH2_Titles <- c("Release Speed Kph with Batting Hand QQ Plot",
                  "Release Speed Kph with Bowling Hand QQ Plot",
                  "Release Speed Kph with Bowling Type QQ Plot",
                  "Release Speed Kph with Wicket QQ Plot")

然后,下面的对象创建一个我希望使用的辅助变量名的向量--以允许purrr::map迭代:

RSKPH2_names <- c("batting_hand", "bowling_hand", "bowling_type", "wicket")

现在已经创建了所需的对象,我使用下面的代码尝试启用purrr::map以进行迭代:

TP2 <- RSKPH2 %>% 
  map( ~ {ggplot(RSKPH2, 
                 aes(sample = release_speed_kph)) + geom_line(aes(color = RSKPH2_names)) + labs(title = RSKPH2_Titles) + gglayers}
  )
TP2

出现以下错误:
geom_line()中的错误:!计算美观度时出现问题第一层出错check_aesthetics()出错导致:! Aesthetics的长度必须为1或与数据相同(194368)修复以下Map:colour
我使用以下代码成功创建了一个打印:

RSKPH_wicket <- ggplot(RSKPH2, 
aes(sample = release_speed_kph, colour = wicket)) +
  ggtitle("Release Speed Kph with Wicket QQ Plot") + gglayers
RSKPH_wicket
    • 编辑**

当我在较大的数据上使用答案中的代码时,下面的图结果。我以四个图中的第二个为例。图例中添加了一个额外的项目,但在数据中找不到。如何删除此项目?

bz4sfanl

bz4sfanl1#

据我所知,您希望为每个RSKPH2_names列创建单独的图。如果这是正确的,则必须循环RSKPH2_names。此外,由于您可能希望根据RSKPH2_Titles为每个图创建不同的标题,因此我将使用map2。最后,我不知道你想如何添加一个geom_line到你的qq图。也许你想每个类别的qq图覆盖在整个样本的图上?假设这是你想要的,我在ggplot2代码中使用了stat_qqstat_qq_line

library(ggplot2)
library(purrr)

TP2 <- map2(RSKPH2_names, RSKPH2_Titles, ~
    ggplot(
      RSKPH2,
      aes(sample = release_speed_kph)
    ) +
      stat_qq_line(aes(color = .data[[.x]])) +
      stat_qq(aes(color = .data[[.x]])) +
      #geom_line(aes(color = .data[[.x]])) +
      labs(title = .y) +
      gglayers
  )
TP2[[1]]

相关问题