Rgraphviz:绘图区域外的边缘标签

时间:2013-05-15 16:55:47

标签: r visualization graphviz graph-visualization bioconductor

我正在尝试使用两个边缘标签绘制Rgraphviz对象。不幸的是,标签不属于情节。这是我的例子:

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 减少标签fontsize(不管我的应用程序中真的不是我想要的)

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)

我的尝试似乎都没有效果。有没有人有想法?

2 个答案:

答案 0 :(得分:4)

问题

plot()对象上调用graph会调度S4方法(由getMethod("plot", "graph")显示),然后通过键入getMethod("plot", "Ragraph")来调用显示的函数。该函数包含以下相当不幸的行,无论您进行任何相关参数设置,都会覆盖它们以将左右边距重置为0.令人沮丧!

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

解决方法

一个解决方法是构建一个三个面板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

enter image description here

答案 1 :(得分:0)

我找到了另一个解决方案:在我原来的问题中,我在agopen得到的布局图中更改了边界框的大小。绘制布局图表显示没有边缘标签。我发现可以将图形对象的边缘属性传递给agopen,然后更改边界框:

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")
z <- agopen(g1, "foo", edgeAttr=eAttrs)
z@boundBox@botLeft@x <- z@boundBox@botLeft@x - 400 ##left
z@boundBox@upRight@x <- z@boundBox@upRight@x + 200 ##right
plot(z)

情节:

enter image description here