2012-12-11 51 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