R partykit::ctree 边缘偏移标签

she*_*hea 4 label r party ctree

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

我检查了其他问题并找到了一个可以提供一些帮助的答案。的情节ctree依赖于grid包,我可以使用函数在边缘写新标签。我现在的问题是我不知道如何抑制plot树时默认打印的标签。我不太了解grid或plot.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)
Run Code Online (Sandbox Code Playgroud)

生成的第一个节点的一条边带有“2seater、compact、midsize、subcompact”,另一条边带有“minivan、pickup、suv”。我最终在情节中看到的是“2seater,紧凑型,中型,subcompaminivan,皮卡,sub”。我已经使图形设备全屏显示。(我还有其他只有一个节点的树,因此在全屏尺寸下这些树看起来很奇怪,所以我不想来回走动。)

我的部分解决方案是

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

在边缘 1 上部分修复坏标签的绘图

这将“2seater, compact”叠加在“中型、超小型”之上,并防止它们重叠“小型货车、皮卡、SUV”。但是现在,我在情节中仍然有原来的太长标签。我正在尝试修复的标签所附的边缘在一个与新堆叠标签不兼容的地方有一个中断。修复那个边缘会很好,但真正的问题是抑制 edge1-1 上的原始标签太长。

Ach*_*eis 5

边缘标签由为边缘标签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))
Run Code Online (Sandbox Code Playgroud)

ctree-justmin

plot(irt, ep_args = list(justmin = 15), gp = gpar(fontsize = 10))
Run Code Online (Sandbox Code Playgroud)

ctree-justmin-fontsize