如何获得仅由散点图和 1:1 线和良好轴标签组成的散点矩阵?

问题描述

我想要一个只有散点图的矩阵,其中存在 1:1 的线。 数据具有以下结构:

bulk_SIC_25 <- data.frame(soilsample$bulk_SIC_scheibler_25,soilsample$bulk_SIC_LECO.CBLB_25,soilsample$bulk_SIC_RE6_25)
colnames(bulk_SIC_25)<-c("SIC_scheibler_25","SIC_LECO-CBLB_25","SIC_RE6_25")

dataframe里面的数据是:

dput(bulk_SIC_25) 结构(列表(SIC_scheibler_25 = c(8.292,9.648,9.072,6.084, 10.944,12.48,4.368,6.732,5.592,9.024,8.7,9.48,9.588,3.432,NA,15.72),SIC_LECO-CBLB_25 = c(6.9,9.5,8,6.6,11.1,13,7,5.5,8.95,9.14,9.6,9.2,3.5,NA),SIC_RE6_25 = c(10.4,10.7,11.3,8.6,13.2,15.5,6.3,7.6,10.5,11.4,5.1,17.2,17.9)),class = "data.frame",row.names = c(NA,-16L))

pairs 函数生成一个漂亮的矩阵,其中只有散点图和可见的 x/y 轴和变量名称example pairs

pairs(bulk_SIC_25,labels=colnames(bulk_SIC_25),gap=0.5,main=" Total Carbon in bulk soil ",lower.panel=NULL,cex.labels=1.5,pch=21,bg="Black")`

但是,我无法更改点的大小,也无法添加 1:1 线。 因此,我切换到带有内部标签的 ggpairs

Example ggpairs internal labels 代码

ggpairs(data=soilsample,columns = c("bulk_SIC_scheibler_25","bulk_SIC_LECO.CBLB_25","bulk_SIC_RE6_25"),upper="blank",axisLabels = "internal")+ggtitle(label="Soil Organic Carbon bulk soil")+theme_bw(base_size=15)+geom_abline(intercept=0,slope=1)+labs(x="g C/ kg soil",y= "g C / kg soil")+geom_point(size=3)+  theme(plot.title = element_text(hjust = 0.5))

但是,如您所见,内部轴标签的网格线与散点图不匹配,因此散点图非常难以阅读。

我试过了:

limitRangediag <- function(data,mapping,...) {
      ggplot(data = data,mapping = mapping,...) + 
        scale_y_continuous(limits = c(5,16)) +
        scale_x_continuous(limits = c(5,16)) 
}

ggpairs(data=soilsample,lower = list(continuous = limitRange),diag=list(continous=limitRangediag),y= "g C / kg soil")+geom_point(size=3)+
      theme(plot.title = element_text(hjust = 0.5))

我知道我在编写函数时做错了什么,但我在这方面非常缺乏经验,也不知道我做错了什么。

我也可以将外部标签放在 ggpairs 中的正确位置(因此跳过第一个空白行,并将标签放在图本身上方),但我不知道这样做...: example ggpairs external labels

ggpairs(data=df,diag="blank",axisLabels = "shown")+ggtitle(label="Soil Organic Carbon bulk soil")+theme_bw(base_size=15)+geom_abline(intercept=0,y= "g C / kg soil")+geom_point(size=3)+ theme(plot.title = element_text(hjust = 0.5))

如果有人能帮我修复这 3 个选项中的一个以获得一个漂亮的散点图矩阵,该矩阵具有 1:1 的线和可调整大小的点,带有可读的轴标签,我将不胜感激!!

解决方法

  • pairs() 中,您可以将 panel= 参数(默认情况下为 points())指定为包含您想要的任何内容的函数,例如对 abline() 的调用(在您的情况下,您将使用 upper.panel=,因为您希望下面板为 NULL)
  • cex 参数(传递给面板函数)将改变磅值。
pairs(mtcars[,1:5],panel = function(...) { points(...); abline(a=0,b=1,lty=2,col="red") },cex=4,gap=0  ## you didn't ask for this but I prefer it
)

在此特定示例中,1:1 线并未出现在每个面板中,但原则上存在(您必须设置 x、y 限制以确保它与面板区域相交)

enter image description here