3

Rgraphviz2 つのエッジ ラベルを持つオブジェクトをプロットしようとしています。残念ながら、ラベルはプロットの外にあります。これが私の例です:

require('Rgraphviz')
set.seed(123)
g1 <- randomGraph(letters[1:10], 1:4, 0.4)
eAttrs <- list()
eAttrs$label <- c("a~g" = "I have a very long label 1", "a~i" = "and a  long label 2")
plot(g1, edgeAttrs = eAttrs)

これが私のプロットです:

私はいくつかのことを試しましたが、成功しませんでした:

1. バウンディングボックスを大きく設定する

z <- agopen(g1, "foo")
z@boundBox@upRight@x <- z@boundBox@upRight@x + 300
z@boundBox@upRight@y <- z@boundBox@upRight@y + 300
plot(z, edgeAttrs = eAttrs)

2. ラベルのフォントサイズを小さくします (実際にはアプリケーションに必要なサイズではありません)。

eAttrs$labelfontsize=c("a~g"="3")
plot(g1, edgeAttrs = eAttrs)

3.par属性 を変更します。

par(oma=c(10,10,10,10))
plot(g1, edgeAttrs = eAttrs)

4. ノード、エッジ、および一般属性を?Rgraphviz::GraphvizAttributes

attrs <- list(graph=list(size=c(1, 1)))
attrs$edge$fontsize<-8 
plot(g1, edgeAttrs = eAttrs, attrs=attrs)

私の試みはどれもうまくいかないようです。誰にもアイデアはありますか?

4

2 に答える 2

5

問題

オブジェクトを呼び出すplot()と、S4 メソッド ( で表示) がディスパッチされ、次に と入力して表示される関数が呼び出されます。この関数には、関連するパラメータ設定に関係なく、左マージンと右マージンを 0 にリセットするためにそれらをオーバーライドする、かなり残念な次の行が含まれています。graphgetMethod("plot", "graph")getMethod("plot", "Ragraph")

oldpars <- par(mai = c(sheight, 0, mheight, 0))
on.exit(par(oldpars), add = TRUE)

回避策

回避策の 1 つは、3 つのパネルを作成しlayout、左右のパネルだけを配置してバッファリング スペースを少し確保することです。クリッピングをオフにして、graphオブジェクトを中央のパネルにプロットすると、動作するように見えます:

layout(matrix(1:3, nrow=1), widths=c(1,5,1))
par(xpd=NA)                    ## turn off all clipping
plot.new()                     ## blank plot in Panel 1
plot(g1, edgeAttrs = eAttrs)   ## graph in Panel 2
plot.new()                     ## blank plot in Panel 3

ここに画像の説明を入力

于 2013-05-15T17:25:16.953 に答える