我有两个因素和两个连续变量,我用它来创建一个使用ggplot2的双向小平面图 . 但是,并非所有因子组合都有数据,因此我最终得到了虚拟方面 . 这是一些产生等效输出的虚拟代码:
library(ggplot2)
dummy<-data.frame(x=rnorm(60),y=rnorm(60),
col=rep(c("A","B","C","B","C","C"),each=10),
row=rep(c("a","a","a","b","b","c"),each=10))
ggplot(data=dummy,aes(x=x,y=y))+
geom_point()+
facet_grid(row~col)
这会产生this figure
有没有办法删除不绘制任何数据的方面?理想情况下,将x和y轴标签向上或向右移动到剩余的图表中?如this GIMPed version所示
我已经足够好了,我无法在任何地方找到同样的问题 . 类似的问题通常是未使用的因子水平,但这里没有使用因子水平,只有因子水平组合 . 所以 facet_grid(drop=TRUE)
或 ggplot(data=droplevel(dummy))
不是我想要的 .
注意:我的实际数据有第三个因子级别,我用不同的点颜色表示 . 因此,允许我保留传奇的单一图解决方案将是理想的 .
3 回答
手动重新排列图形对象(
grobs
)以实现您所追求的目标并不困难 .ggplot2
绘图转换为grob
.确定要移除的哪个方面以及要移动到哪个轴取决于
grob
的网格结构 .gtable_show_layout(grob)
给出了网格结构的直观表示,其中(7, 4)
之类的数字表示行7
和列4
中的面板 .将其扩展到更多方面非常简单 .
当然,一种可能的解决方案是分别为每个因子组合创建一个图,然后使用
gridExtra
从gridExtra
组合它们 . 这可能会失去我的传奇,并会是一种全身心疼,如果有人有更好的建议,我很乐意听到 .这个特殊情况看起来像ggpairs的工作(link到SO的例子) . 我自己没有使用它,但对于配对的情节,这似乎是这项工作的最佳工具 .
在更一般的情况下,在您不寻找对的情况下,您可以尝试使用该变量创建一个具有复合(粘贴)因子和facet_grid或facet_wrap的列(example)