如何在R的neuralnet包绘制的神经网络图中添加标题
解决neuralnet神经网络绘图无法添加标题的问题
在使用R的neuralnet包训练神经网络后,调用自带的plot()函数绘制网络结构时,不管用main还是title参数都没法添加标题。原训练和绘图代码如下:
library(neuralnet) data(infert, package="datasets") net.infert <- neuralnet(case~parity+induced+spontaneous, infert, err.fct="ce", linear.output=FALSE, likelihood=TRUE) plot(net.infert, rep="best")
我试过这两种写法,都没效果:
plot(net.infert, rep="best", title = "Incisors") plot(net.infert, rep="best", main= "Incisors")
问题原因
neuralnet的绘图功能是基于grid图形系统实现的,而我们常用的main参数属于基础绘图系统,所以直接传参不会生效。
解决方案
方法1:用grid包手动加标题
加载grid包后,在绘制完神经网络图之后,调用grid.text()来添加标题,还能自定义位置和字体样式:
library(neuralnet) library(grid) data(infert, package="datasets") net.infert <- neuralnet(case~parity+induced+spontaneous, infert, err.fct="ce", linear.output=FALSE, likelihood=TRUE) # 先绘制神经网络图 plot(net.infert, rep="best") # 添加标题:y参数控制垂直位置,gp设置字体大小、加粗等 grid.text("Incisors", y = 0.95, gp = gpar(fontsize = 14, fontface = "bold"))
方法2:修改plot函数,支持main参数(进阶)
如果需要频繁使用带标题的绘图,可以修改neuralnet包的plot.nn函数,让它支持main参数:
# 复制原plot.nn函数 my_plot.nn <- neuralnet:::plot.nn # 给函数添加标题逻辑 body(my_plot.nn)[[length(body(my_plot.nn)) + 1]] <- quote( if (!missing(main)) { grid.text(main, y = 0.95, gp = gpar(fontsize = 14, fontface = "bold")) } ) # 替换包内的原函数(也可以直接调用my_plot.nn) assignInNamespace("plot.nn", my_plot.nn, "neuralnet") # 之后就能直接用main参数了 plot(net.infert, rep="best", main="Incisors")
内容的提问来源于stack exchange,提问作者antecessor
相关产品推荐
相关产品推荐

