2012-12-11 50 views
3

我想整理我的ggplot散点图的标签,使标签不相互重叠的直接标签库。为此,我试图使用直接标签库,但是我无法使其正常工作。当我试图代码:Rearanging ggplot散点图的标签与R中

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. 

所以我加入AES到geom_point()

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

+1

每个标签(172和165)之间的差异是否有意义?我在问,因为你可以使用基于这些数字减少的色阶。例如,将它们分成10个或20个组。例如,如果它们表示地理或其他可测量距离的东西。 –

+0

另一个步骤可能是去掉点,仅积的数字(在这种情况下,你将要设置'hjust'和'vjust' 0.5。 但我认为最终是没有办法让所有在场的标签,并且不重叠,并且字体很大 - 太多的数据点太靠近彼此。 –

+0

@BrandonBertelsen本身并没有意义上的差异,但我想知道172和165在哪里。例如,我想确定y轴中4.5到5.5之间的数据点组中的哪些数据点群集。 –

回答

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,标签=名称))+ geom_text(AES(X,Y))+ facet_wrap(〜 k均值,鳞片= “免费”)

Cluster Breakout

我选择了20个集群随机

你也可以使用heirarchical集群看到一个树状图。

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

我建议你与集群包一般打转转,因为它可以提供给您的问题更加有用的解决方案。

+0

感谢和非常有趣的解决方案。我猜测聚类算法采用x和y轴的值。有没有办法仅使用y轴值对数据进行聚类。 –

+0

你会做同样的事情,但基于你的群集'as.factor(kmeans(d $ y,20)$ cluster)' –

2

您可以简单地删除点并只绘制标签,这可以通过注释掉图中的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