R 两个相同大小的并排对应图

问题描述 投票:0回答:1

让我们假设两个(或更多)数据帧

v1 <- rnorm(100, 0, 1)
df1 <- data.frame("Very_long_variable_name_1" = v1, 
                  "Very_long_variable_name_2" = v1 + rnorm(100, 0, 0.1))
df2 <- data.frame("Very_long_variable_name_1" = 3*v1 - 1, 
                  "Very_long_variable_name_2" = 2*v1 + rnorm(100, 0, 0.1))

现在我可以创建相关矩阵了

cors1 <- cor(df1, method = "pearson")
cors2 <- cor(df2, method = "pearson")

问题在于这些相关矩阵的行名和列名非常长,因此难以合理地绘制。我可以通过将它们映射到其他东西来减轻这种情况,即

fun <- function(corr, shortName)
{
  if(shortName)
  {
    rownames(corr) <- c("V1", "V2")
  }
  colnames(corr) <- c("V1", "V2")
  return(corr)
}
cp1 <- corrplot::corrplot(fun(cors1, FALSE),  method = "color")
cp2 <- corrplot::corrplot(fun(cors2, TRUE),  method = "color")

但是,当我并排绘制它们时,第一个 corrplot 较小,因为还显示了完整的行名称

par(mfrow = c(1,2))
cp1 <- corrplot::corrplot(fun(cors1, FALSE),  method = "color")
cp2 <- corrplot::corrplot(fun(cors2, TRUE),  method = "color")

有什么办法可以让它们的尺寸相同吗?或者在绘图区域之外添加某种图例(例如“V1:Very_long_variable_name1”)?

编辑:我发现的一种解决方案是简单地使用

layout()
函数:

layout(matrix(c(1, 2), 
              nrow = 1, 
              ncol = 2, 
              byrow = TRUE),
       widths =  c(1.5,1))
cp1 <- corrplot::corrplot(fun(cors1, FALSE), method = "color")
cp2 <- corrplot::corrplot(fun(cors2, TRUE), method = "color")

但是,它需要手动选择每个图的宽度。

r plot correlation
1个回答
0
投票

我不知道如何组合基本图形图,但如果您的数据结构与示例类似,那么您可以使用

ggplot2
patchwork

library(ggplot2)
library(patchwork)

fillrange <- range(c(cors1, cors2))
gg1 <- ggplot(as.data.frame.table(fun(cors1, FALSE)), aes(Var2, Var1, fill = Freq)) +
  geom_tile() +
  scale_fill_continuous(limits = fillrange)
gg2 <- ggplot(as.data.frame.table(fun(cors2, TRUE)), aes(Var2, Var1, fill = Freq)) +
  geom_tile() +
  scale_fill_continuous(limits = fillrange)
gg1 + gg2 +
  plot_layout(guides = "collect", axes = "collect")

作为奖励,颜色条图例被组合在一起,因此图之间的颜色具有可比性。 (此步骤是可选的,如果不需要,您可以删除

guides="collect"
和对
scale_fill_continuous(limits=)
的两次调用。)

© www.soinside.com 2019 - 2024. All rights reserved.