5

これが小さなデータセットです:

myd <- data.frame(PC1 = rnorm(5, 5, 2), 
PC2 = rnorm (5, 5, 3), label = c("A", "B", "C", "D", "E"))
plot(myd$PC1, myd$PC2)
text( myd$PC1-0.1, myd$PC2, lab = myd$label)

直線(ユークリッド)距離の線の間で可能なすべての組み合わせを接続して、このようなグラフを作成したい(できればベースグラフィックスまたはggplot2で)

ここに画像の説明を入力してください

4

2 に答える 2

6

基本プロットソリューションは次のとおりです。

plot(myd$PC1, myd$PC2)
apply(combn(seq_len(nrow(myd)), 2), 2, 
      function(x) lines(myd[x, ]$PC1, myd[x, ]$PC2))

ここに画像の説明を入力してください

ggplot2ソリューションは次のとおりです。

ps <- data.frame(t(apply(combn(seq_len(nrow(myd)), 2), 2, 
                         function(x) c(myd[x, ]$PC1, myd[x, ]$PC2))))
qplot(myd$PC1, myd$PC2) +
  geom_segment(data = ps, mapping = aes(x = X1, xend = X2, y = X3,yend = X4))

ここに画像の説明を入力してください

于 2012-07-13T14:43:33.547 に答える
2

geom_segmentggplotでは、接続線を描画するために使用できます。

ただし、最初に、各接続線の座標を使用してデータフレームを作成する必要があります。combn()すべての組み合わせを検索するために使用します。

comb <- combn(nrow(myd), 2)
connections <- data.frame(
  from = myd[comb[1, ], 1:2],
  to   = myd[comb[2, ], 1:3]
)
names(connections) <- c("x1", "y1", "x2", "y2", "label")

次に、プロットします。

library(ggplot2)

ggplot(myd, aes(PC1, PC2)) + 
  geom_point(col="red", size=5) + 
  geom_segment(data=connections, aes(x=x1, y=y1, xend=x2, yend=y2), col="blue")

ここに画像の説明を入力してください

于 2012-07-13T14:48:30.110 に答える