2

最近我问了一个关于在一张图片中获取多个图表的问题。我得到了一些很好的答案,但仍然存在 1 个问题。

如何将散点图中的点更改为标签?剧情长这样在此处输入图像描述

现在我希望将所有黑点更改为数据的行名。我用于绘图的代码如下:

plotAll<-function(data){
  combs <- expand.grid(names(data), names(data))
  out <- do.call(rbind, apply(combs, 1, function(x) {
    tt <- data[, x]; names(tt) <- c("V1", "V2")
    tt <- cbind(tt, id1 = x[1], id2 = x[2])
  }))

  library(plyr)
  df.text=ddply(out[out$id1==out$id2,],.(id1,id2),summarise,
                pos=max(V1)-(max(V1)-min(V1))/2)
  out[out$id1==out$id2,c("V1","V2")]<-NA
  ggplot(data = out, aes(x = V2, y = V1)) + geom_point(alpha = 0.5) +
    facet_grid(id1 ~ id2,scales="fixed")+
    geom_text(data=df.text,aes(pos,pos,label=id1)) + geom_abline( slope=1 ) + 
    ggtitle("Corralation between measured & calculated affinities") +
    ylab("") + xlab("") + theme(panel.grid.minor.x=element_blank(), panel.grid.major.x=element_blank())
}

我知道我必须将设置更改为geom_point(alpha=0.5)但是geom_text(label=rownames(data))这会删除我的轴并将行名放在 y 轴和我的数据点中。所以可能我在情节的布局上做错了,但它是什么仍然是一个问题。

4

1 回答 1

0

所以结果比我想象的要困难得多......基本问题是NA价值观 -geom_text无法处理它们。这很容易通过以下方式解决:

geom_text(data = out[!is.na(out$V1),], label = "test")

但是,当您rownames按照标签进行操作时,就会出现问题。我不知道为什么,但通过向您的数据框添加标签列来快速解决它。完整功能如下。

plotAll<-function(data){
  combs <- expand.grid(names(data), names(data))
  out <- do.call(rbind, apply(combs, 1, function(x) {
    tt <- data[, x]; names(tt) <- c("V1", "V2")
    tt <- cbind(tt, id1 = x[1], id2 = x[2])
  }))

  library(plyr)
  df.text=ddply(out[out$id1==out$id2,],.(id1,id2),summarise,
                pos=max(V1)-(max(V1)-min(V1))/2)
  out[out$id1==out$id2,c("V1","V2")]<-NA
  out$labels <- rownames(out)
  ggplot(data = out, aes(x = V2, y = V1)) + geom_text(data = out[!is.na(out$V1),], aes(label = labels)) +
    facet_grid(id1 ~ id2,scales="fixed")+
    geom_text(data=df.text,aes(pos,pos,label=id1)) + geom_abline( slope=1 ) + 
    ggtitle("Corralation between measured & calculated affinities") +
    ylab("") + xlab("") + theme(panel.grid.minor.x=element_blank(), panel.grid.major.x=element_blank())
}
plotAll(data)
于 2013-05-02T12:37:47.413 回答