如何使用gridGraphics转换分类树图

如何使用gridGraphics转换分类树图,r,gridview,plot,tree,R,Gridview,Plot,Tree,我使用rpart估算了分类树(CART): library(rpart) treefit <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis, control = rpart.control(cp = 0.001)) 然后,我尝试使用程序包gridGraphics的grid.echo命令将绘图转换为使用grid绘制的相同结果 我收到以下错误消息: Error in unit(x, default.unit

我使用rpart估算了分类树(CART):

library(rpart)
treefit <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis,
          control = rpart.control(cp = 0.001))
然后,我尝试使用程序包gridGraphics的grid.echo命令将绘图转换为使用grid绘制的相同结果

我收到以下错误消息:

Error in unit(x, default.units) : 'x' and 'units' must have length > 0
我尝试了另一种可视化树的工具,包rpart.plot:

再说一遍:

Error in unit(x, default.units) : 'x' and 'units' must have length > 0
当我试图转换party、RWeka和Rgraphviz生成的树图时,我也从grid.echo获得错误消息。 该命令似乎只能转换由rpart生成的绘图:


不幸的是,这些图是原始的,不令人愉快。

我无法提供完整的解决方案,但至少有一些评论和备选方案:

rpart.plot
fancyRpartPlot()
rpart.plot()的
。在内部,前者调用后者(或者实际上从同一个包调用其同级函数
prp()
)。因此,两者都会导致同样的问题,这并不奇怪。然而,我不知道如何解决这个错误

(或者更好的是其后续包
partykit
)和
RWeka
的绘图无法转换的事实并不令人惊讶。它们已使用
网格绘制
!您还可以使用
partykit
基础结构绘制
rpart
树:

library("partykit")
plot(as.party(treefit))

亲爱的Achim,您的评论非常有用,并为我提供了一种使用gridSVG生成交互式树的方法。谢谢大家!@achim zeileis,感谢您对统计界做出的巨大贡献!你知道吗,有没有办法将
party
树转换为
rpart
表示法?没有,我们没有尝试过这样做,因为
rpart
格式确实是特定于CART算法的,不能轻易表示其他树算法中使用的信息。你可能会为重要的部分找到解决办法,但我们总是觉得这不值得(对我们来说)。据我所知,没有其他人试图编写这样的接口。
library(rpart.plot)
rpart.plot(treefit)
grid.echo()
Error in unit(x, default.units) : 'x' and 'units' must have length > 0
plot(treefit)
text(treefit)
grid.echo()
grid.ls()

graphics-plot-1-xlab-1
graphics-plot-1-ylab-1
graphics-plot-1-text-1
graphics-plot-1-lines-1
graphics-plot-1-text-2
graphics-plot-1-text-3
library("partykit")
plot(as.party(treefit))