【发布时间】:2017-06-27 14:09:11
【问题描述】:
我正在组合多个 ggplot 图,使用网格视口,这是必要的(我相信),因为我想旋转一个图,这是标准 ggplot 甚至是 gridExtra 包中不可能实现的。
我想在两个图上画一条线,以使相关性更加清晰。但要确切知道线条在哪里,我需要 ggplot 图中某个点的相对位置(grob?)。
我做了以下例子:
require(reshape2)
require(grid)
require(ggplot2)
datamat <- matrix(rnorm(50), ncol=5)
cov_mat <- cov(datamat)
cov_mat[lower.tri(cov_mat)] <- NA
data_df <- melt(datamat)
cov_df <- melt(cov_mat)
plot_1 <- ggplot(data_df, aes(x=as.factor(Var2), y=value)) + geom_boxplot()
plot_2 <- ggplot(cov_df, aes(x=Var1, y=Var2, fill=value)) +
geom_tile() +
scale_fill_gradient(na.value="transparent") +
coord_fixed() +
theme(
legend.position="none",
plot.background = element_rect(fill = "transparent",colour = NA),
panel.grid=element_blank(),
panel.background=element_blank(),
panel.border = element_blank(),
plot.margin = unit(c(0, 0, 0, 0), "npc"),
axis.ticks=element_blank(),
axis.title=element_blank(),
axis.text=element_text(size=unit(0,"npc")),
)
cov_heatmap <- ggplotGrob(plot_2)
boxplot <- ggplotGrob(plot_1)
grid.newpage()
pushViewport(viewport(height=unit(sqrt(2* 0.4 ^2), 'npc'),
width=unit(sqrt(2* 0.4 ^2), 'npc'),
x=unit(0.5, 'npc'),
y=unit(0.63, 'npc'),
angle=-45,
clip="on")
)
grid.draw(cov_heatmap)
upViewport(0)
pushViewport(viewport(height=unit(0.5, 'npc'),
width=unit(1, 'npc'),
x=unit(0.5, 'npc'),
y=unit(0.25, 'npc'),
clip="on")
)
grid.draw(boxplot)
如何找到箱线图第一个框的相对 x 和 y 位置?以及三角协方差矩阵的相对 x 和 y 位置。
我知道我必须查看 grob 对象boxplot,但我不知道如何在那里找到相关数据。
编辑:
线条从底部图上的点到顶部图上的块。
【问题讨论】:
-
这些事情确实很难做到(除非像@baptiste 这样的魔术师从旁边晃过)。您可能会发现绘制已使用
geom_polygon旋转的顶部面板会更容易,然后将绘图与例如cowplot::plot_grid. -
谢谢,我去看看。但当然,如果我有解决问题的方法,我更喜欢它,因为它可能会在未来帮助我和其他人。
-
两条线之间的线?你能手动画线来展示你想要的地方吗?
-
@naco,请查看我编辑的帖子。