0

次のデータセットを hvar します。

structure(c(2L, 6L, 2L, 6L, 7L, 7L, 2L, 7L, 6L, 8L, 8L, 4L, 8L, 
2L, 9L, 8L, 7L, 6L, 9L, 1L, 9L, 4L, 9L, 3L, 2L, 10L, 9L, 10L, 
8L, 10L, 7L, 6L, 10L, 1L, 2L, 12L, 9L, 8L, 12L, 1L, 11L, 10L, 
2L, 44L, 79L, 10L, 8L, 47L, 45L, 51L, 9L, 11L, 74L, 75L, 77L, 
69L, 75L, 77L, 78L, 2L, 44L, 44L, 46L, 46L, 8L, 6L, 1L, 1L, 6L, 
7L, 1L, 4L, 7L, 8L, 8L, 1L, 4L, 8L, 3L, 8L, 8L, 9L, 9L, 9L, 1L, 
9L, 5L, 9L, 3L, 9L, 9L, 9L, 10L, 8L, 10L, 7L, 10L, 10L, 1L, 10L, 
10L, 9L, 12L, 12L, 1L, 12L, 12L, 12L, 12L, 7L, 7L, 44L, 44L, 
44L, 44L, 44L, 44L, 44L, 44L, 44L, 44L, 7L, 7L, 7L, 7L, 44L, 
10L, 9L, 42L, 43L, 46L, 46L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, -1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, -1L, 1L, 1L, 1L, -1L, -1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, -1L), .Dim = c(66L, 
3L), .Dimnames = list(NULL, c("from", "to", "impact")))

データセットは、プラス (1) またはマイナス (-1) の影響を持つ from と to の間の接続を示します。

このグラフをプロットする ggnet (または ggplot2) でネットワーク グラフをプロットしたいと思います。

これまでのところ、次の手順を実行しました。

library(network)
library(ggplot2)
library(ggnet)
library(grid)

net <- network(df2[,c(1,2)], directed = FALSE)

ggnet(net, mode = 'kamadakawai', size = 6, alpha = .5, label.nodes=F, segment.alpha = 0.5, color = "black") +
  theme(legend.position = "none") +
  theme(plot.margin = unit(c(0.1,0.1,0.1,0.1), "cm"))

これにより、次の結果が得られます。 ここに画像の説明を入力

データセットへの影響に基づいてエッジを色付けする方法を考えています (1 = 緑、-1 = 赤)。また、接続されていないノードが非常に多いのはなぜだろうと思っています...

誰かがこれで私を助けることができますか?

どうもありがとう。

4

3 に答える 3

0

ggnet が内部で使用していると思われるnetworkパッケージを使用して、プロットを直接作成することもできます。

# Dominik's data structure
edgelist<-structure(c(2L, 6L, 2L, 6L, 7L, 7L, 2L, 7L, 6L, 8L, 8L, 4L, 8L, 
2L, 9L, 8L, 7L, 6L, 9L, 1L, 9L, 4L, 9L, 3L, 2L, 10L, 9L, 10L, 
8L, 10L, 7L, 6L, 10L, 1L, 2L, 12L, 9L, 8L, 12L, 1L, 11L, 10L, 
2L, 44L, 79L, 10L, 8L, 47L, 45L, 51L, 9L, 11L, 74L, 75L, 77L, 
69L, 75L, 77L, 78L, 2L, 44L, 44L, 46L, 46L, 8L, 6L, 1L, 1L, 6L, 
7L, 1L, 4L, 7L, 8L, 8L, 1L, 4L, 8L, 3L, 8L, 8L, 9L, 9L, 9L, 1L, 
9L, 5L, 9L, 3L, 9L, 9L, 9L, 10L, 8L, 10L, 7L, 10L, 10L, 1L, 10L, 
10L, 9L, 12L, 12L, 1L, 12L, 12L, 12L, 12L, 7L, 7L, 44L, 44L, 
44L, 44L, 44L, 44L, 44L, 44L, 44L, 44L, 7L, 7L, 7L, 7L, 44L, 
10L, 9L, 42L, 43L, 46L, 46L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, -1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, -1L, 1L, 1L, 1L, -1L, -1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, -1L), .Dim = c(66L, 
3L), .Dimnames = list(NULL, c("from", "to", "impact")))

# construct a network object
net<-as.network.matrix(edgelist,matrix.type='edgelist',
                    ignore.eval=FALSE,names.eval='impact')

# plot it, using the impact edge attribute to control edge color
plot(net,edge.col=ifelse(net%e%'impact'==1,'green','red'))

ここに画像の説明を入力

Id の範囲を変更して分離株を削除することに関する上記の Nate Pope の回答は引き続き適用されます。ただし、分離を描画しないように plot.network に指示することもできます。

plot(net,edge.col=ifelse(net%e%'impact'==1,'green','red'),displayisolates=FALSE)

ここに画像の説明を入力

于 2013-12-14T01:23:02.023 に答える