R partykit::ctree 边缘上的偏移标签

R partykit::ctree offset labels on edges

我正在使用 ctree,我的数据集有一个创建节点的因素协变量。该协变量有足够多的因子,并且它们的名称足够长,以至于它们在节点处创建的边上相互重叠。我想找到一种方法来阻止这种重叠。

我检查了其他问题,发现一个 answer 提供了一些帮助。 ctree 的情节依赖于 grid 包,我可以使用函数在边缘上写新标签。我现在的问题是,当我 plot 树时,我不知道如何抑制默认打印的标签。我对 gridplot.party 了解不够,无法确定需要抑制哪个对象。

下图中我的问题示例: 我的示例问题的代码:

libary(partykit)
library(tidyverse) #this is here for the mpg data set in next line. not required for partykit
data(mpg)
irt <- ctree(hwy~as.factor(class),data=mpg)
plot(irt)

生成的第一个节点的一条边为“2seater,紧凑型,中型,超紧凑型”,另一条边为"minivan, pickup, suv"。我最终在情节中看到的是“2seater,紧凑型,中型,小型货车,皮卡,潜艇”。我已经让图形设备全屏显示了。 (我有其他只有一个节点的树,因此在全屏维度上看起来很奇怪,所以我不想来回移动。)

我的部分解决方案是

plot(irt, pop=FALSE)
seekViewport("edge1-1")
grid.text("2seater, compact,\n midsize, subcompact")

这会在 "midsize, subcompact" 之上堆叠“2seater,compact”并防止它们重叠 "minivan, pickup, suv"。但是现在,我在情节中仍然有原始的太长标签。我正在尝试修复的标签所贴的边缘在不适用于新堆叠标签的地方有一个中断。修复该边会很好,但真正的问题是抑制 edge1-1 上原始的、太长的标签。

边缘标签是由函数 edge_simple() 绘制的,它为边缘标签提供了各种对齐方式,请参阅 ?edge_simple。仅当边缘标签平均长于 justmin 时才应用对齐,默认为 Inf(即:无对齐)。各种理由都是可能的(交替、增加、减少或相等)。

因此,在您的情况下,最简单的解决方案可能是将 justmin 设置为足够小的有限值。或者(或另外)您还可以通过设置 gpar(fontsize = ...) 来减小字体大小。为了便于说明,以下两个示例都是在 6 英寸 x 8 英寸 PNG 设备上生成的:

library("partykit")
data("mpg", package = "ggplot2")
irt <- ctree(hwy ~ factor(class), data = mpg)
plot(irt, ep_args = list(justmin = 15))

plot(irt, ep_args = list(justmin = 15), gp = gpar(fontsize = 10))