R 使用ggplot2中的刻面网格自定义散点图矩阵

R 使用ggplot2中的刻面网格自定义散点图矩阵,r,ggplot2,statistics,R,Ggplot2,Statistics,我正在尝试使用facet_grid在ggplot2中编写一个自定义散点图矩阵函数。我的数据有两个分类变量和一个数值变量 我想根据一个分类变量刻面(生成散点图行/列),并根据另一个分类变量更改绘图符号 为此,我首先构建一个更大的数据集,其中包含我创建散点图面板所依据的分类变量的所有组合(combs) 我的问题是: 如何使用geom___________________________________________________ 如何将刻面的标题分别移动到底部和左侧 如何删除左上和右下镶嵌面的

我正在尝试使用facet_grid在ggplot2中编写一个自定义散点图矩阵函数。我的数据有两个分类变量和一个数值变量

我想根据一个分类变量刻面(生成散点图行/列),并根据另一个分类变量更改绘图符号

为此,我首先构建一个更大的数据集,其中包含我创建散点图面板所依据的分类变量的所有组合(
combs

我的问题是:

  • 如何使用geom___________________________________________________
  • 如何将刻面的标题分别移动到底部和左侧
  • 如何删除左上和右下镶嵌面的记号轴和标签
提前谢谢

require(ggplot2)

# Data
nC <- 5
nM <- 4

dat <- data.frame(
    Control = rep(LETTERS[1:nC], nM), 
    measure = rep(letters[1:nM], each = nC), 
    value = runif(nC*nM))

# Change factors to characters
dat <- within(dat, {
    Control <- as.character(Control)
    measure <- as.character(measure)
})
# Check, lapply(dat, class)

# Define scatterplot() function
scatterplotmatrix <- function(data,...){

    controls <- with(data, unique(Control))
    measures <- with(data, unique(measure))
    combs <- expand.grid(1:length(controls), 1:length(measures), 1:length(measures))

    # Add columns for values
    combs$value1 = 1
    combs$value2 = 0

    for ( i in 1:NROW(combs)){
        combs[i, "value1"] <- subset(data, subset = Control==controls[combs[i,1]] & measure == measures[combs[i,2]], select = value)
        combs[i, "value2"] <- subset(data, subset = Control==controls[combs[i,1]] & measure == measures[combs[i,3]], select = value)
    }

    for ( i in 1:NROW(combs)){
        combs[i,"Control"] <- controls[combs[i,1]]
        combs[i,"Measure1"] <- measures[combs[i,2]]
        combs[i,"Measure2"] <- measures[combs[i,3]]
    }

    # Final pairs plot
    plt <- ggplot(combs, aes(x = value1, y = value2, shape = Control)) + 
    geom_point(size = 8, colour = "#F8766D") + 
    facet_grid(Measure2 ~ Measure1) + 
    ylab("") + 
    xlab("") + 
    scale_x_continuous(breaks = c(0,0.5,1), labels = c("0", "0.5", "1"), limits = c(-0.05, 1.05)) + 
    scale_y_continuous(breaks = c(0,0.5,1), labels = c("0", "0.5", "1"), limits = c(-0.05, 1.05)) +
    geom_rect(data = subset(combs, subset = Measure1 == Measure2), colour='white', xmin = -Inf, xmax = Inf,ymin = -Inf,ymax = Inf) 

    return(plt)
}

# Call
plt1 <- scatterplotmatrix(dat)
plt1
require(ggplot2)
#资料

nC我不知道如何将面板条(标签)移动到底部或左侧。此外,不可能单独格式化各个面板(例如,仅关闭一个面上的记号标记)。因此,如果您确实需要这些功能,您可能需要使用除
ggplot
之外的其他功能。你真的应该仔细研究一下
GGally
,尽管我在这方面从未取得过多的成功

至于留下一些空白的面板,这里有一个方法

nC <- 5; nM <- 4
set.seed(1)     # for reproducible example
dat <- data.frame(Control = rep(LETTERS[1:nC], nM), 
                  measure = rep(letters[1:nM], each = nC),
                  value = runif(nC*nM))

scatterplotmatrix <- function(data,...){
  require(ggplot2)
  require(data.table)
  require(plyr)      # for .(...)
  DT <- data.table(data,key="Control")
  gg <- DT[DT,allow.cartesian=T]
  setnames(gg,c("Control","H","x","V","y"))
  fmt <- function(x) format(x,nsmall=1)
  plt <- ggplot(gg, aes(x,y,shape = Control)) + 
    geom_point(subset=.(as.numeric(H)<as.numeric(V)),size=5, colour="#F8766D") + 
    facet_grid(V ~ H) + 
    ylab("") + xlab("") + 
    scale_x_continuous(breaks=c(0,0.5,1), labels=fmt, limits=c(-0.05, 1.05)) + 
    scale_y_continuous(breaks=c(0,0.5,1), labels=fmt, limits=c(-0.05, 1.05))   
  return(plt)
}
scatterplotmatrix(dat)

nC您有没有看过包
GGally
中的
ggpairs
?看起来,使用该函数可以非常轻松地完成大部分所需操作,您只需重新调整数据集的形状(如
dcast(dat,Control~measure)
如果使用
restrape2
),谢谢。我开始在Python中使用matplotlib,以获得我所追求的全部灵活性。抱歉,如果这对那些只使用R的人没有帮助。