R partykit :: ctree смещает метки по краям - PullRequest
0 голосов
/ 06 марта 2019

Я работаю с ctree, и в моем наборе данных есть ковариата факторов, которые создают узел. Факторов для этого ковариата достаточно, и их имена достаточно длинные, чтобы они перекрывали друг друга в ребрах, созданных в узле. Я хочу найти способ остановить это совпадение.

Я проверил другие вопросы и нашел один ответ , который предоставляет некоторую помощь. Сюжет для ctree основан на пакете grid, и я могу использовать функции для написания новых меток по краю. Моя проблема сейчас в том, что я не знаю, как подавить надписи, которые печатаются по умолчанию, когда я plot дерево. Я не знаю достаточно о grid или plot.party, чтобы понять, какой объект нужно подавить.

Пример моей проблемы на следующем рисунке: example of plot with overlapping labels on first edge Код для моего примера задачи:

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)

Результирующий 1-й узел имеет один край с «2seater, compact, midsize, subcompact», а другой край с «minivan, pickup, suv». То, что я в конечном итоге вижу в сюжете: «2-местный, компактный, средний, субкомпаминированный, пикап, саб» Я уже сделал графическое устройство полноэкранным. (У меня есть другие деревья, у которых есть только один узел, и поэтому они выглядят странно в полноэкранном измерении, поэтому я не хочу переходить туда-сюда.)

Частичное решение, которое у меня есть,

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

plot with partial fix of bad labels on edge 1

Это накладывает "2-местный, компактный" поверх "среднего размера, малолитражного" и будет препятствовать их наложению "минивэн, пикап, внедорожник". Но теперь у меня есть оригинальный слишком длинный лейбл, все еще в сюжете. И край, к которому прикреплен ярлык, который я пытаюсь исправить, имеет разрыв в месте, которое не работает с новым сложенным ярлыком. Было бы неплохо исправить этот край, но настоящая проблема заключается в подавлении оригинальной, слишком длинной метки на edge1-1.

1 Ответ

0 голосов
/ 07 марта 2019

Метки края рисуются функцией edge_simple(), которая предлагает различные виды выравнивания для меток края, см. ?edge_simple. Обоснование применяется только в том случае, если метки ребер в среднем длиннее justmin, по умолчанию Inf (т. Е. Без обоснования). Возможны различные обоснования (чередование, увеличение, уменьшение или равенство).

Таким образом, в вашем случае самое простое решение - установить justmin на достаточно маленькое конечное значение. В качестве альтернативы (или дополнительно) вы также можете уменьшить размер шрифта, установив gpar(fontsize = ...). Для иллюстрации оба примера ниже были сгенерированы на устройстве PNG размером 6 x 8 дюймов:

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

ctree-justmin

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

ctree-justmin-fontsize

...