在两个图之间为geom_tile设置特定的图块大小

在这里可能会遗漏一些简单的东西,但是我的目标是从两个单独的矩阵绘制两个热图。矩阵的尺寸不同,但是我希望每个单独绘制的图块在两个图形之间具有相同的物理度量。然后,图的大小应取决于矩阵的尺寸,因为图之间的瓦片大小将是恒定的。

这是两个不同大小的矩阵以及我要制作的图形的精简版本的示例。

mat_lg <- matrix(rexp(20,rate=.1),ncol = 5)

melt(mat_lg) %>%
  ggplot(aes(x = Var1,y = Var2,fill = value)) +
  geom_tile() +
  theme_bw() +
  coord_equal()

mat_sm <- matrix(rexp(12,rate = .1),ncol = 3)

melt(mat_sm) %>%
  ggplot(aes(x = Var1,fill = value)) +
  geom_tile() +
  theme_bw() +
  coord_equal()

由mat_lg制成的图形具有较小的图块...

在两个图之间为geom_tile设置特定的图块大小

与由mat_sm制成的图形中的图块相比...

在两个图之间为geom_tile设置特定的图块大小

我已经使用了geom_tile中的width / height设置,但是无法实现我的目标。还玩过grid.arrange以及facet_wrap设置,但无济于事。

我的猜测是,为了获得具有相同物理尺寸的图块,我需要根据初始矩阵尺寸更改最终图块大小。非常感谢您对此事有任何帮助!

emily198688 回答:在两个图之间为geom_tile设置特定的图块大小

如果两个矩阵至少具有一个相等的维,则可以直接通过egg::ggarrange()(将绘图面板排成一行)来实现:

## Save plots into variables
gg1 <- melt(mat_lg) %>% ggplot(...)
gg2 <- melt(mat_sm) %>% ggplot(...)

## Let ggarrange line up the panels
egg::ggarrange( gg1,gg2 )

enter image description here

如果两个矩阵的尺寸完全不同,请使用egg::set_panel_size明确调整面板尺寸:

p1 <- egg::set_panel_size( gg1,height=unit(ncol(mat_lg),"cm"),width=unit(nrow(mat_lg),"cm") )
p2 <- egg::set_panel_size( gg2,height=unit(ncol(mat_sm),width=unit(nrow(mat_sm),"cm") )
cowplot::plot_grid( p1,p2,nrow=1 )

enter image description here

,

如果我理解正确,您希望两个热图都具有相同的高度和宽度。 根据您的示例,您应该计算矩阵之间的比率,并将其作为参数传递给coord_equal。在您的示例中,它应类似于:

library(ggplot2)
library(dplyr)
mat_lg <- matrix(rexp(20,rate=.1),ncol = 5)

melt(mat_lg) %>%
  ggplot(aes(x = Var1,y = Var2,fill = value)) +
  geom_tile() +
  theme_bw() +
  coord_equal()

mat_sm <- matrix(rexp(12,rate = .1),ncol = 3)
scale_factor = ncol(mat_lg) / ncol(mat_sm)

melt(mat_sm) %>%
  ggplot(aes(x = Var1,fill = value)) +
  geom_tile() +
  theme_bw() +
  coord_equal(ratio = scale_factor)

您将获得两个相同大小的热图:

mat_sm:

enter image description here

mat_lg:

enter image description here

是您要找的东西吗?

本文链接:https://www.f2er.com/3112848.html

大家都在问