首页 > 解决方案 > 如何在 R 中使用 ggpairs 添加第二个图例?

问题描述

基本上,我正在尝试在ggpairs情节中添加第二个图例。在下面的示例图中,我使用虹膜数据并运行 arandomForest来获取预测。我在对角线上绘制密度,在下三角形中绘制散点图,在上三角形中绘制相关性。我通过randomForest预测为密度和散点图着色。但是,我正在使用自定义函数(在此处找到)为相关网格着色。

我想知道是否有可能有一个显示物种的图例(这部分在下面的代码中)和一个显示相关颜色的图例。这是我遇到麻烦的后一部分。

library(randomForest)
library(GGally)

# Get data
ir <- iris

# Create randomForest
rf <- randomForest::randomForest(Species~., data = ir)
pred <- rf$predicted


# Remove Species for plotting
ir <- ir[,-5]

# function to colour corr plot
my_fn <- function(data, mapping, method="p", use="pairwise", ...){
  
  # grab data
  x <- eval_data_col(data, mapping$x)
  y <- eval_data_col(data, mapping$y)
  
  # calculate correlation
  corr <- cor(x, y, method=method, use=use)
  
  # calculate colour based on correlation value
  colFn <- colorRampPalette(c("dodgerblue4", "floralwhite", "firebrick1"), interpolate ='spline')
  fill <- colFn(100)[findInterval(corr, seq(-1, 1, length=100))]
  
  #make plot
  ggally_cor(data = data, mapping = mapping,  ...) +
    theme_void() +
    theme(panel.background = element_rect(fill=fill), panel.border=element_blank(), axis.line=element_line(),
          strip.text = element_text(face="bold", colour="red", size = 5))
}


  
p <- ggpairs(ir,
             mapping=ggplot2::aes(colour = pred), legend = 1,
             upper=list(continuous = my_fn),
             diag = list(continuous = "densityDiag"),
             lower=list(continuous=wrap("points", size=.2))) +
  theme(panel.border=element_blank(), axis.line=element_line(),
                   strip.text = element_text(face="bold", colour="red", size = 5))
p

这将导致如下所示:

ggpairs 图

是否可以添加与相关图颜色相对应的第二个图例?在我的示例中,相关图的 1 = 红色,0 = 白色,-1 = 蓝色。

编辑[仍在尝试解决这个问题,如果有人有任何建议,那就太好了]

标签: rggallyggpairs

解决方案


推荐阅读