6

在 ggplot2 中使用 facet_grid 时,我希望能够获得特定图右上角每个网格单元的子集数据的相关值。

例如,如果运行:

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

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

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

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

这可能吗?

提前致谢

4

2 回答 2

7

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)

不过,我不认为用 margins=TRUE 来正确显示它是不可能的。如果你想要边距,你可能需要预处理你的数据,为每个分面变量添加一个 ALL 值。

-温斯顿

于 2012-07-24T08:50:58.247 回答
6

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

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)

在此处输入图像描述

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

在此处输入图像描述

于 2012-07-24T08:10:29.983 回答