Есть ли способ манипулировать заголовками сюжета ctree?

Есть ли способ изменить размеры заголовка графика 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")

пример URP

Как изменить размер заголовка? Я пробовал следующее, которое ничего не делает:

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


person Frikster    schedule 30.07.2014    source источник


Ответы (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))

и это дает

введите здесь описание изображения

person MrFlick    schedule 30.07.2014
comment
Спасибо. Это все работает отлично. Поскольку заголовок всегда является первым элементом в списке, возвращаемом вашим кодом, я могу использовать это, чтобы мгновенно увеличить размер заголовка всех сотен совершенно разных моих деревьев. Однако проблема: я не могу изменить сами имена узлов на то, что у вас есть. Если бы я захотел изменить Node 2 на Group 2, что бы я сделал? - person Frikster; 02.08.2014
comment
Вам просто нужно изменить свойство label, а не настройки gp. Например, grid.edit("GRID.text.686", label="Sub-Plot 1") переименует график левого узла в этом примере. - person MrFlick; 02.08.2014
comment
И это хорошо, сами имена могут меняться, но относительные позиции должны быть одинаковыми для разных графиков с одним и тем же макетом. - person MrFlick; 02.08.2014
comment
Надеюсь, можно задать этот вопрос здесь, поскольку я не считаю, что здесь нужен еще один вопрос, но как мне изменить размер прямоугольных объектов в сетке? Я просмотрел gsub, и у него нет параметра размера прямоугольника. Кроме того, у меня были проблемы, когда увеличение размера шрифта приводило к тому, что метка перекрывалась с другими объектами сетки. Как я мог перемещать объекты в разных направлениях по сетке? - person Frikster; 11.09.2014