highlight
您可以使用 的参数更改某些属性graphviz.plot
,但是,它似乎不允许更改标签大小。您可以全局设置它,但是这样做会失去控制。
par(cex=0.05)
graphviz.plot(res, highlight =
list(nodes=nodes(res), fill="lightgreen", col="black"))
如您的问题所示,您可以使用 graphNEL 对象的 plot 方法的参数获得更多控制,attrs
但同样存在方向问题。
g <- bnlearn::as.graphNEL(res) # use this to avoid printing of graphviz.plot
plot(g, attrs=list(node = list(fillcolor = "lightgreen", fontsize=4)))
也尝试使用全局设置图表参数graph.par
,但是,当我尝试这个时,字体大小会改变但颜色不会呈现
graph.par(list(nodes=list(fill="lightgreen", fontsize=10)))
renderGraph( Rgraphviz::layoutGraph(bnlearn::as.graphNEL(res)))
graphviz.plot
因此,您可以使用以下函数更改返回的节点nodeRenderInfo
:
g1 <- graphviz.plot(res)
graph::nodeRenderInfo(g1) <- list(fill="lightgreen", fontsize=8)
Rgraphviz::renderGraph(g1)
但是,这确实会在分配时绘制网络graphviz.plot
。因此,作为替代方案,您可以更改graphNEL
对象(由 返回graphviz.plot
)。默认情况下,graphNEL
对象要么全部是有向的,要么全部是无向的,但是您可以手动调整边缘。这就是这样graphviz.plot
做的。通过查看 的代码bnlearn:::graphviz.backend
,它识别出无向边,并使用graph::edgeRenderInfo(graph.plot)
. 您可以使用类似的方法来做您想做的事 - 使用该函数nodeRenderInfo
来更新节点属性。
所以大家一起:
# this sets all edges to directed
g <- Rgraphviz::layoutGraph(bnlearn::as.graphNEL(res))
# set undirected edges
u <- names(which(graph::edgeRenderInfo(g)[["direction"]] == "both"))
graph::edgeRenderInfo(g)[["arrowhead"]][u] = "none"
graph::edgeRenderInfo(g)[["arrowtail"]][u] = "none"
# update node attributes: fill colour and label fontsize
graph::nodeRenderInfo(g) <- list(fill="lightgreen", fontsize=8)
# render
Rgraphviz::renderGraph(g)