使用R中的直接标签库重新排列ggplot散点图的标签

时间:2012-12-11 02:35:33

标签: r ggplot2

我正在尝试组织我的ggplot散点图的标签,以便标签不会相互重叠。为此,我试图使用直接标签库,但我无法让它工作。当我尝试代码时:

mytable <- read.csv('http://www.fileden.com/files/2012/12/10/3375236/My%20Documents/CF1_deNovoAssembly.csv', sep=",",  header=TRUE)

mytable$Consensus.length <- log(mytable$Consensus.length)

mytable$Average.coverage <-log(mytable$Average.coverage)

mytable$Name <- do.call(rbind,strsplit(as.character(mytable$Name), " ", '['))[,3]

ggplot(mytable, aes(x=Consensus.length, y=Average.coverage, label=Name)) + geom_point() + ylab("Contig Average Coverage (log)") + xlab("Contig Consensus Length (log)") + opts(title="Contig Coverage vs Length") + geom_text(hjust=0, vjust=-0.2, size=4)
direct.label(p, "first.qp")

我收到了这个错误:

Error in direct.label.ggplot(p, "first.qp") : 
  Need colour aesthetic to infer default direct labels.

所以我通过在geom_point()

中添加aes来更改绘图脚本
ggplot(mytable, aes(x=Consensus.length, y=Average.coverage, label=Name)) + geom_point(aes(colour=Average.coverage)) + ylab("Contig Average Coverage (log)") + xlab("Contig Consensus Length (log)") + opts(title="Contig Coverage vs Length") + geom_text(hjust=0, vjust=-0.2, size=4)

现在我收到以下错误

Error in order.labels(d) : labels are not aligned

我发现this thread他们建议手动放置标签,如果只有少数数据点,或者如果数据点太多则根本不放置标签。我同意这一点,但我将使用许多不同的数据集生成此图,我确实需要数据标签。到目前为止,这是图表的外观 enter image description here

2 个答案:

答案 0 :(得分:3)

您可以简单地删除点并仅绘制标签,这可以通过注释掉您的绘图的geom_point()部分来完成。 (您还需要将hjust和vjust值更改为0.5,以便标签的中心出现在该点的位置):

ggplot(mytable, aes(x=Consensus.length, y=Average.coverage, label=Name)) + 
  #geom_point() + 
  ylab("Contig Average Coverage (log)") + xlab("Contig Consensus Length (log)") + 
  opts(title="Contig Coverage vs Length") + geom_text(hjust=0.5, vjust=0.5, size=4)

仍有一些重叠,但也许通过调整字体大小和情节不会太严重。

enter image description here

答案 1 :(得分:2)

从您的评论中,它听起来更像是一个集群练习。所以,让我们继续,实际上这样做:

set.seed(9234970)
d <- data.frame(Name=mytable$Name, 
x=mytable$Consensus.length, 
y=mytable$Average.coverage)
d$kmeans <- as.factor(kmeans(d[-1],20)$cluster)
ggplot(d, aes(x, y, color=kmeans)) + 
geom_point() + 
theme(legend.position="bottom")

kmeans clusters     ggplot(d,aes(x,x,label = Name))+       geom_text(aes(x,y))+       facet_wrap(~kmeans,scales =&#34; free&#34;)

Cluster Breakout

我随机选择了20个群集

您还可以使用层次聚类来查看树状图。

plot(hclust(dist(d[-3]))) # -3 drops kmeans column

我建议一般使用群集程序包,因为它可能会为您的问题提供更有用的解决方案。