将ggplot的点更改为文本标签

时间:2013-05-02 12:21:29

标签: r ggplot2

最近我问question有关在1张图片中获取多张图表的问题。我得到了一些相当不错的答案,但仍然存在一个问题。

如何将散点图中的点更改为标签? 该图看起来像enter image description here

现在我希望将所有黑点都更改为数据的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
  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))的设置但是删除了我的轴并将rownames放在y轴上并放入我的数据点。所以我可能在绘制情节时做错了,但这仍然是一个问题。

1 个答案:

答案 0 :(得分: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)