让我们假设两个(或更多)数据帧
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")
但是,它需要手动选择每个图的宽度。
我不知道如何组合基本图形图,但如果您的数据结构与示例类似,那么您可以使用
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=)
的两次调用。)