首页 文章

来自ggplot2的构面网格中的相关值

提问于
浏览
6

当在ggplot2中使用facet_grid时,我希望能够为特定绘图右上角的每个网格单元的子集化数据赋予相关值 .

例如如果运行:

p <- ggplot(mtcars, aes(mpg, wt)) + geom_point()
p + facet_grid(vs ~ am, margins=TRUE)

我希望看到某个网格中9个图中每个图的相关值 . 在这个例子的特定情况下,我希望每个都接近目视检查的-0.9左右 .

或者也许是一个与绘图一起使用的输出表,它给出了表格中与facet_grid匹配的每个单元格的相关值...(这是不太理想的,但也是一个选项) .

理想情况下,我想将此扩展到我选择的任何其他函数,以便它可以使用绘制的两个变量中的任何一个或两个来计算统计数据 .

这可能吗?

提前致谢

2 回答

  • 4

    我宁愿为数据添加一个(线性)平滑器 . 它为您提供了比相关更多的信息 .

    ggplot(mtcars, aes(mpg, wt)) + 
        geom_smooth(method = "loess", colour = "red", fill = "red") + 
        geom_smooth(method = "lm", colour = "blue", fill = "blue") + 
        geom_point() + facet_grid(vs ~ am, margins=TRUE)
    

    enter image description here

    ggplot(mtcars, aes(mpg, wt)) + geom_smooth(method = "lm") + geom_point() + 
        facet_grid(vs ~ am, margins=TRUE)
    

    enter image description here

  • 4

    Winston Chang在ggplot2小组上提出了一个答案...这就是他所说的......这不是一个糟糕的答案......

    你可以这样做:

    p <- ggplot(mtcars, aes(mpg, wt)) + geom_point()
    
    # Calculate correlation for each group
    cors <- ddply(mtcars, c("vs", "am"), summarise, cor = round(cor(mpg, wt), 2))
    
    p + facet_grid(vs ~ am) +
    geom_text(data=cors, aes(label=paste("r=", cor, sep="")), x=30, y=4)
    

    不过,我认为有可能无法正确使用margin = TRUE . 如果需要边距,则可能需要预处理数据以为每个面向变量添加ALL值 .

    -Winston

相关问题