R:绘制决策树标签时,叶子节点文本被截断

20

(我仍在学习如何在R中处理图像;这是对rpart package: Save Decision Tree to PNG 的延续)

我试图将rpart生成的决策树图以PNG格式保存,而不是提供的Postscript。我的代码看起来像这样:

png("tree.png", width=1000, height=800, antialias="cleartype")
plot(fit, uniform=TRUE, 
   main="Classification Tree")
text(fit, use.n=TRUE, all=TRUE, cex=.8)
dev.off()

但会在两侧的端点标签上裁剪一些内容。这在我转换为PNG格式检查的原始post图像中并不是问题。我尝试了在par中使用建议用于标签/文本问题的omamar设置,它们都在图像周围添加了白色空间,但仍然没有显示出更多的标签。有没有办法让文字适应?


3
请尝试阅读 ?plot.rpart 中包含的文档,并特别注意 margin 参数。 - joran
啊,我不知道有这么多设置边距的方法。谢谢! - rhae66
4个回答

19

rpart.plot包绘制rpart树并自动处理边缘和相关问题。使用rpart.plot(而不是rpart包中的plottext)。例如:

library(rpart.plot)
data(ptitanic)
fit <- rpart(survived~., data=ptitanic)
png("tree.png", width=1000, height=800, antialias="cleartype")
rpart.plot(fit, main="Classification Tree")
dev.off()

3
这里。页边距不是唯一的问题。有时候情节会随意截断文本标签。 - Don Scott

15

默认的边距是0。因此,如果您的文本是一组单词或只是一个长单词,请尝试在绘图调用中添加更多的边距。例如,

plot(fit, uniform=TRUE,margin=0.2)
text(fit, use.n=TRUE, all=TRUE, cex=.8)

或者,您可以通过更改文本调用中的cex来调整文本字体大小。例如,

plot(fit, uniform=TRUE)
text(fit,use.n=TRUE, all=TRUE, cex=.7)

当然,您可以在绘图调用中调整mar,在文本调用中调整cex以获得所需效果。


2
在rpart的文档中,rpart()函数的示例中,作者提供了一个解决方案:使用xpd = NA设置par选项。
par(mfrow = c(1,2), xpd = NA)

否则在某些设备上文本会被裁剪。

0

泰坦尼克号数据集的问题是rplot无法将年龄和票价连接起来以显示一个漂亮的“年龄>10”的标签。它会通过扩展来显示它们,例如:

age = 11,18,19,22,24,28,29,30,32,33,37,39,40,42,45.5,5,56,58,60...

这样就没有空间放标签了(见图片)

错误的标签

解决方案在这里: https://community.rstudio.com/t/rpart-result-is-too-small-to-see/60702/4

基本上,您需要将年龄和票价列变成数字变量。像这样:

clean_titanic <- titanic %>% 
  select(-c(home.dest, cabin, name, x, ticket)) %>%
  mutate(
    pclass = factor(pclass, levels = c(1, 2, 3), labels = c('Upper', 'Middle', 'Lower')),
    survived = factor(survived, levels = c(0, 1), labels = c('No', 'Yes')),
    # HERE. Also notice I'm removing dots from numbers
    age = as.numeric(age),
    fare = as.numeric(fare)
  )

这将为您提供更好的标签,并在图表中为它们留出空间。

还有一件事:当您使用as.numeric强制非数字值时,可能会收到警告,有几种解决方法,例如替换字符或忽略警告。可以像这样忽略:

suppressWarnings(as.numeric(age)))

好剧情


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接