4

ラベルが互いに重ならないように、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.

そこで、 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

このスレッドでは、データ ポイントが少ない場合はラベルを手動で配置するか、データ ポイントが多すぎる場合はラベルをまったく配置しないことを提案しています。これには同意しますが、多くの異なるデータ セットを使用してこのグラフを生成するので、データ ラベルが必要です。今のところグラフはこんな感じ ここに画像の説明を入力

4

2 に答える 2

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)

まだ多少の重複はありますが、文字の大きさやプロットを調整することで、あまり深刻にならなくなるかもしれません。

ここに画像の説明を入力

于 2012-12-12T02:59:04.937 に答える
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 クラスター ggplot(d, aes(x, x, label=Name)) + geom_text(aes(x,y)) + facet_wrap(~kmeans, scales="free")

クラスターブレイクアウト

ランダムに 20 個のクラスターを選択しました

階層型クラスタリングを使用して樹状図を表示することもできます。

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

問題に対してより有用な解決策を提供する可能性があるため、一般的にクラスターパッケージを試してみることをお勧めします。

于 2012-12-12T03:59:48.127 に答える