如何在R中编辑ctree标签

如何在R中编辑ctree标签,r,tree,boxplot,axis-labels,party,R,Tree,Boxplot,Axis Labels,Party,我有一个携程制作,我想做进一步的编辑 我的代码是: plot(ct, main = expression('Suitable Brook Trout Habitat (m'^2*'/100m'^2*')'), inner_panel = node_inner(ct, fill = c("white"), id = FALSE), terminal_panel = node_boxplot(ct, col = "black", fill = "lightgray", widt

我有一个携程制作,我想做进一步的编辑

我的代码是:

plot(ct,
  main = expression('Suitable Brook Trout Habitat (m'^2*'/100m'^2*')'), 
  inner_panel = node_inner(ct, fill = c("white"), id = FALSE),
  terminal_panel = node_boxplot(ct, col = "black", fill = "lightgray",
    width = 0.5, yscale = NULL, ylines = 3, cex = 0.5, id = FALSE)
)

我想在箱线图上的y轴和16.4(希望是16.4 m)等变量上添加标签


任何帮助都将不胜感激。

这样做并不完全简单,因为必须调整面板功能才能在不同的面板中执行不同的操作。例如,您只需要节点1的两条边上的米,并且只需要节点2左侧的y轴标签。当然,也可以在节点4和5中重复y轴标签,但这是多余的。这就是为了避免视觉上的“混乱”而完全忽略它的主要动机

因此,我的建议是首先像上面那样创建绘图,然后手动添加所需的位和块。为此,可以利用所谓的
视口
s的
网格
系统。这些是为内部节点、边和所有端子节点创建的打印区域。默认情况下,创建绘图后将删除视口(称为
pop
ping视口,在
grid
jargon中)。但是您可以通过设置
pop=FALSE
简单地保留它们。然后,所有视口都有相当简单的名称,可用于导航

对于一个可再现的示例,我使用R中的
cars
数据,该数据还生成一个具有三个终端节点的树:

library("partykit")
ct <- ctree(dist ~ speed, data = cars)
对于节点3中的y轴标签,我们可以使用标签“node\u boxplot3plot”
跳转到视口。(当然,在您的示例中,节点
2
而不是
3
),然后我们可以使用
grid.text()
添加y轴标签。坐标水平方向为-3行(文本),垂直方向为中间(0.5标准化父坐标):

seekViewport("node_boxplot3plot")
grid.text("Hello World!",
  x = unit(-3, "lines"), y = unit(0.5, "npc"), rot = 90)
最后,我们在节点1的第一个和第二个边缘标签中添加
“m”
。它们分别称为
“edge1-1”
“edge1-2”
。现在,水平位置再次是该视口的中间位置(0.5 npc)加上字符串的宽度(
“<17”
)(
”<16.4“
):

seekViewport(“edge1-1”)
网格文本(“m”,x=单位(0.5,“npc”)+单位(1,“标准宽度”,“小于17”))
参见第1-2边
网格文本(“m”,x=单位(0.5,“npc”)+单位(1,“标准宽度”“>17”))
综合起来,这将产生:

seekViewport("node_boxplot3plot")
grid.text("Hello World!",
  x = unit(-3, "lines"), y = unit(0.5, "npc"), rot = 90)
seekViewport("edge1-1")
grid.text("m", x = unit(0.5, "npc") + unit(1, "strwidth", "< 17"))
seekViewport("edge1-2")
grid.text("m", x = unit(0.5, "npc")+ unit(1, "strwidth", "> 17"))