与绘制变量不同的变量的stat_cor

jei2mxaa  于 2023-04-09  发布在  其他
关注(0)|答案(1)|浏览(148)

我有这个情节:

mtcars$mpg_level <- as.character(as.integer(mtcars$mpg))
p1 <- ggplot(data = mtcars, aes(x = disp, y = mpg_level, color=mpg_level , shape=mpg_level)) + geom_point()
p1 <- p1 + scale_shape_manual(values = 1:length(unique(mtcars$mpg_level)))

我想为mpgdisp之间的相关性添加一个标签
这不起作用:

p2 <- ggplot(data = mtcars, aes(x = disp, y = mpg_level, color=mpg_level , shape=mpg_level)) + geom_point()
p2 <- p2 + stat_cor(aes(label = ..rr.label..), color = "red", geom = "label", digits = 2, size = 3)
p2 <- p2 + scale_shape_manual(values = 1:length(unique(mtcars$mpg_level)))

给出:

Warning message:
Computation failed in `stat_cor()`
Caused by error in `cor.test.default()`:
! not enough finite observations

所以我怀疑它试图获得mpg_level的每个级别之间的相关性,这是由以下工作支持的:

p3 <- ggplot(data = mtcars, aes(x = disp, y = mpg)) + geom_point()
p3 <- p3 + stat_cor(aes(label = ..rr.label..), color = "red", geom = "label", digits = 2, size = 3)

我觉得它应该是这样的,我把mpgdisp分别加到stat_cor中,但显然不起作用:

p4 <- ggplot(data = mtcars, aes(x = disp, y = mpg_level, color=mpg_level , shape=mpg_level)) + geom_point()
p4 <- p4 + stat_cor(aes(x=disp, y=mpg, label = ..rr.label..), color = "red", geom = "label", digits = 2, size = 3)
p4 <- p4 + scale_shape_manual(values = 1:length(unique(mtcars$mpg_level)))
1l5u6lss

1l5u6lss1#

问题是你的数据是按mpg_level分组的。要通过stat_cor获得你想要的相关性,你必须额外设置group aes来覆盖默认分组,即添加group=1

library(ggplot2)
library(ggpubr)

mtcars$mpg_level <- as.character(as.integer(mtcars$mpg))

p <- ggplot(data = mtcars, aes(x = disp, y = mpg_level, color = mpg_level, shape = mpg_level)) +
  geom_point() +
  scale_shape_manual(values = seq_along(unique(mtcars$mpg_level))) 

p +
  ggpubr::stat_cor(aes(x = disp, y = mpg, label = after_stat(rr.label), group = 1),
    color = "red", geom = "label", digits = 2, size = 3,
    inherit.aes = FALSE
  )

然而,虽然这是有效的,并且给出了所需的相关性,但标签被放置在mpg处,而不是mpg_level处。要解决这个问题,您必须显式地设置标签位置。
注意:当然,这也可以通过将mpgMap到y上来避免。

p <- ggplot(data = mtcars, aes(x = disp, y = mpg_level, color = mpg_level, shape = mpg_level)) +
  geom_point() +
  scale_shape_manual(values = seq_along(unique(mtcars$mpg_level))) 

p +
  ggpubr::stat_cor(aes(x = disp, y = mpg, label = after_stat(rr.label), group = 1),
    color = "red", geom = "label", digits = 2, size = 3,
    inherit.aes = FALSE, label.y = "34"
  )

相关问题