17

マニュアルには、これは将来の機能になると記載されていますが:

arrow.size 矢印のサイズ。現在、これは定数であるため、すべてのエッジで同じです。ベクトルが送信された場合、最初の要素のみが使用されます。これがエッジ属性から取得された場合、最初のエッジの属性のみがすべての矢印に使用されます。これは将来変更される可能性があります。

デフォルト値は 1 です。

矢印のサイズをエッジの幅 (各エッジには独自の幅があります) と一致させるためのハックがあるかどうか疑問に思っていました。

d <- data.frame(start=c("a","a","b","c"),end=c("b","b","c","b"), size=rnorm(4))


graph <- graph.data.frame(d, directed=T)

plot(graph,
     vertex.color="white",
     edge.width=E(graph)$size*20,
     edge.arrow.size=E(graph)$size)

ここに画像の説明を入力

4

1 に答える 1

13

さて、ハックがあります。異なるエッジ幅の数だけグラフをプロットし、毎回「右」の矢印サイズでエッジの特定のサブセットのみをプロットする必要があります。引数を使用して、add=TRUEそれらを重ねてプロットします。頂点を一度だけプロットしたい場合もあります。

ところで。これについては、 https://github.com/igraph/igraph/issuesで機能リクエストを送信できます。

編集:ここに例があります:

library(igraph)

## (almost) your example data
d <- data.frame(start=c("a","a","b","c"),
                end=c("b","b","c","b"),
                size=1:4)
graph <- graph.data.frame(d, directed=TRUE)

## The plotting function
eqarrowPlot <- function(graph, layout, edge.lty=rep(1, ecount(graph)),
                        edge.arrow.size=rep(1, ecount(graph)),
                        vertex.shape="circle",
                        edge.curved=autocurve.edges(graph), ...) {
  plot(graph, edge.lty=0, edge.arrow.size=0, layout=layout,
       vertex.shape="none")
  for (e in seq_len(ecount(graph))) {
    graph2 <- delete.edges(graph, E(graph)[(1:ecount(graph))[-e]])
    plot(graph2, edge.lty=edge.lty[e], edge.arrow.size=edge.arrow.size[e],
         edge.curved=edge.curved[e], layout=layout, vertex.shape="none",
         vertex.label=NA, add=TRUE, ...)
  }
  plot(graph, edge.lty=0, edge.arrow.size=0, layout=layout,
       vertex.shape=vertex.shape, add=TRUE, ...)
  invisible(NULL)
}

## Test
eqarrowPlot(graph, layout.auto(graph), edge.arrow.size=E(graph)$size/3,
            edge.width=E(graph)$size)

プロット

ただし、エッジが非常に広いと見栄えが悪くなります。

于 2013-06-05T15:06:44.953 に答える