【问题标题】:Is there any way to manipulate the titles of a ctree plot?有没有办法操纵 ctree 图的标题?
【发布时间】:2014-07-30 03:07:23
【问题描述】:

有没有办法改变 ctree 图的标题大小?

使用以下变量快速设置 ctree 图

a<-c(41, 45, 50, 50, 38, 42, 50, 43, 37, 22, 42, 48, 47, 48, 50, 47, 41, 50, 45, 45, 39, 45, 46, 48, 50, 47, 50, 21, 48, 50, 48, 48, 48, 46, 36, 38, 50, 39, 44, 44, 50, 49, 40, 48, 48, 45, 39, 40, 44, 39, 40, 44, 42, 39, 49, 50, 50, 48, 48, 47, 48, 47, 44, 41, 50, 47, 50, 41, 50, 44, 47, 50, 24, 40, 43, 37, 44, 32, 43, 42, 44, 38, 42, 45, 50, 47, 46, 43,
37, 47, 37, 45, 41, 50, 42, 32, 43, 48, 45, 45, 28, 44,38, 41, 45, 48, 48, 47 ,49, 16, 45, 50, 47, 50, 43, 49, 50)

X1<-c(NA,NA,NA,NA,NA,1,2,2,2,NA,2,2,2,2,2,2,2,NA,NA,2,2,2,2,NA,2,2,2,2,2,2,2,NA,NA,NA,NA,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,NA,2,2,2,2,2,2,2,2,2,2,NA,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,1,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,2,2,2)
X2<-c(NA,NA,NA,NA,NA,NA,2,2,2,NA,NA,2,2,2,2,2,2,NA,2,2,2,2,2,NA,2,2,2,2,2,2,2,NA,NA,NA,NA,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,NA,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,1,2,2,2,2,2,2,2)
X3<-c(NA,35,40,NA,10,NA,31,NA,14,NA,NA,15,17,NA,NA,16,10,15,14,39,17,35,14,14,22,10,15,0,34,23,13,35,32,2,14,10,14,10,10,10,40,10,13,13,10,10,10,13,13,25,10,35,NA,13,NA,10,40,0,0,20,40,10,14,40,10,10,10,10,13,10,8,NA,NA,14,NA,10,28,10,10,15,15,16,10,10,35,16,NA,NA,NA,NA,30,19,14,30,10,10,8,10,21,10,10,35,15,34,10,39,NA,10,10,6,16,10,10,10,10,34,10)
X4<-c(NA,NA,511,NA,NA,NA,NA,NA,849,NA,NA,NA,NA,1324,1181,832,1005,166,204,1253,529,317,294,NA,514,801,534,1319,272,315,572,96,666,236,842,980,290,843,904,528,27,366,540,560,659,107,63,20,1184,1052,214,46,139,310,872,891,651,687,434,1115,1289,455,764,938,1188,105,757,719,1236,982,710,NA,NA,632,NA,546,747,941,1257,99,133,61,249,NA,NA,1080,NA,645,19,107,486,1198,276,777,738,1073,539,1096,686,505,104,5,55,553,1023,1333,NA,NA,969,691,1227,1059,358,991,1019,NA,1216)

p<-cbind(X1,X2,X3,X4)

通过以下内容,您应该得到下面的图

library(party)  
urp<-ctree(a~., data=data.frame(a,p))
plot(urp, main = "Broken Title")

如何更改标题大小?我尝试了以下没有任何作用的方法:

plot(urp, main = "Broken Title",cex = 1.5)
plot(urp, main = "Broken Title",cex.main = 1.5)

事实上,我可以操纵标题吗? font.main 同样什么也不做。标题“节点 2”和“节点 3”呢?我也没有办法操纵它们吗?

这里问了一个类似的问题: https://stackoverflow.com/questions/18817522/ctree-changing-titles-of-inner-nodes

【问题讨论】:

    标签: r tree data-visualization partitioning party


    【解决方案1】:

    有好消息也有坏消息。

    所以实际上完成所有工作的plot() 函数是party:::plot.BinaryTree。可以从?plot.BinaryTree 获得帮助,但坏消息是它没有任何易于访问的字体格式参数。不过,好消息是该函数使用网格图形绘制到屏幕上,您可以在创建绘图后更新属性。

    所以在你运行之后

    library(party)  
    urp<-ctree(a~., data=data.frame(a,p))
    plot(urp, main = "Broken Title")
    

    你可以跑

    for(gg in grid.ls(print=F)[[1]]) {
       if (grepl("text", gg)) {
           print(paste(gg, grid.get(gg)$label,sep=": "))
       }
    }
    

    查看绘图上的所有文本框。例如,我看到了

    [1] "GRID.text.673: Broken Title"
    [1] "GRID.text.677: X1"
    [1] "GRID.text.678: p = 0.03"
    [1] "GRID.text.680: 1"
    [1] "GRID.text.682: phantom(0) <= 1"
    [1] "GRID.text.684: phantom(0) > 1"
    [1] "GRID.text.686: Node 2 (n = 8)"
    [1] "GRID.text.697: Node 3 (n = 109)"
    

    在这里我看到了节点名称,以及它们包含的文本。请注意,每个绘图的节点名称都不相同,并更改您绘制相同绘图的所有内容。但是您可以使用此列表来查找您想要更改并更新它们的列表。所以如果我想让正文更大,我会运行

    grid.edit("GRID.text.673", gp=gpar(fontsize=20))
    

    或者如果我想将节点标签变为斜体,我会运行

    grid.edit("GRID.text.686", gp=gpar(fontface=3))
    grid.edit("GRID.text.697", gp=gpar(fontface=3))
    

    这给了

    【讨论】:

    • 谢谢。这一切都完美无缺。由于标题始终是您的代码返回的列表中的第一个元素,我可以使用它来立即增加我所有数百个截然不同的 ctree 的标题大小。但问题是:我似乎无法用您拥有的我自己更改节点名称。如果我想将“节点 2”更改为“组 2”,我会怎么做?
    • 您只需要更改label 属性而不是gp 设置。例如,grid.edit("GRID.text.686", label="Sub-Plot 1") 将重命名此示例中的左侧节点图。
    • 这很好,名称本身可能会改变,但在具有相同布局的不同地块之间的相对位置应该是一致的。
    • 希望可以在这里问这个问题,因为我认为这不需要另一个问题,但是如何更改网格中矩形对象的大小?我看过一个 gsub,它没有矩形大小的参数。此外,我遇到了增加字体大小使标签与其他网格对象重叠的问题。如何在网格上沿不同方向平移对象?
    猜你喜欢
    • 2018-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多