20

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

我正在尝试以 PNG 形式保存 rpart 中的决策树图,而不是提供的附言。我的代码如下所示:

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()

但剪掉了两边边缘节点的一些标签。这在原始图像中不是问题post,我已将其转换为 png 只是为了检查。我已经尝试同时使用omamar中的设置par,推荐作为标签/文本问题的解决方案,并且两者都在图像周围添加了空白,但不再显示标签。有没有办法让文字适合?

4

4 回答 4

19

rpart.plot包绘制 rpart 树并自动处理边距和相关问题。使用rpart.plot(代替plottextrpart包中)。例如:

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()
于 2014-03-13T19:33:34.907 回答
15

默认边距为 0。因此,如果您的文本是一组单词或只是一个长单词,请尝试在 plot call 中放置更多边距。例如,

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 以获得您想要的。

于 2015-02-09T05:50:19.887 回答
2

在 rpart man 上,在rpart()示例中作者给出了解决方案,设置 par 选项xpd = NA

par(mfrow = c(1,2), xpd = NA)

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

于 2017-01-02T17:10:37.283 回答
0

问题tiwh titanic dataset is rplot不会加入年龄和票价以显示nive“年龄> 10”标签。它将按扩展名显示它们,例如:

年龄 = 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)))

好情节

于 2020-10-07T03:10:13.983 回答