11

私はグラフを生成しました:

library(DiagrammeR)
grViz("
digraph boxes_and_circles {

  # a 'graph' statement
  graph [layout = neato, overlap = true, fontsize = 10, outputorder = edgesfirst]

  # several 'node' statements
  node [shape = circle,
  fontname = Helvetica]
  A [pos = '1,1!']; 
  B [pos = '0,2!']; 
  C [pos = '1.5,3!']; 
  D [pos = '2.5,1!']; 
  E [pos = '4,1!']; 
  F [pos = '4,2!']; 
  G [pos = '5,1!']; 
  H [pos = '6,2!']; 
  I [pos = '1.5,-0.1!'];

  # several 'edge' statements
  A->B B->C
  D->E D->F E->F E->G F->G G->H F->H
  }
  ")

生成するもの:

ここに画像の説明を入力

ここで、ノード A、B、および C の周りに点線でボックスを描きたいと思います。

Rでこれを達成するにはどうすればよいですか? ソリューションの重要な要件は、再現可能であることです。つまり、スクリプトを複数回実行して同じ結果が得られることです。

4

3 に答える 3

5

ウィジェットには @StevenBeaupre のソリューションを使用できますが、R のグラフィックスを使用してネットワークをグラフ化するためのパッケージがいくつかあります。1 つはigraph、他のソリューションを使用することにオープンである場合です。

これでグラフが作れます

library('igraph')
set.seed(11)
g <- data.frame(from = c('A', 'B', 'I', 'D', 'D', 'E', 'E', 'F', 'F', 'G'),
                to = c('B', 'C', 'I', 'E', 'F', 'G', 'F', 'H', 'G', 'H'))
(gg <- graph.data.frame(g, directed = TRUE))
plot(gg, vertex.color = 'white')

r グラフィックスにボックスを追加する方法はたくさんあります。これは、プロットをクリックして、何も計算せずにボックスを追加できるものです

rekt <- function(...) {
  coords <- c(unlist(locator(1)), unlist(locator(1)))
  rect(coords[1], coords[2], coords[3], coords[4], ..., xpd = NA)
}

rekt(border = 'red', lty = 'dotted', lwd = 2)

私はこれを得る

ここに画像の説明を入力

于 2015-08-03T19:49:25.250 に答える
2

での簡単な解決策DiagrammRは、neato ではなく dot を使用することです。ほとんどの場合、ノードを手動で配置する機能は失われます (属性 pos は機能しなくなります) が、クラスターとサブグラフを使用してノードのセットの周りに線を引く機能が得られます。

library(DiagrammeR)
grViz("
      digraph boxes_and_circles {

      # a 'graph' statement
      graph [ fontsize = 10,rankdir=LR]

      # several 'node' statements
      node [shape = circle,
      fontname = Helvetica]

      # several 'edge' statements

      subgraph cluster_1 {
            style=dotted
            A->B->C
        }

      D->E D->F E->F E->G F->G G->H F->H
      I
      }

      ")

ここに画像の説明を入力

于 2015-09-05T10:55:15.657 に答える