forestplot: я хочу изменить существующий fpDrawNormalCI, как это предлагается пакетом

Мотивирующий пример - мне нужно сделать лесной участок с закрашенными и незакрашенными кругами для символов.

forestplot(labeltext = labelstrings,
       fn.ci_norm = c(fpDrawCircleCI, fpDrawPointCI),
       mean=cbind(df.both$mauc, df.both$mcmax), 
       lower=cbind(df.both$lauc, df.both$lcmax),
       upper=cbind(df.both$uauc, df.both$ucmax),
       xlog=TRUE,
       boxsize=0.4,
       pch=1,
       xticks = c(0.33,0.5,0.8,1,1.25,2,3),
       col=fpColors(box=c("black","black"),line=c("black","black")),
       txt_gp = fpTxtGp(xlab=gpar(cex=1),ticks=gpar(cex=0.8)))`

но символы немного отличаются по размеру (fpDrawPointCI меньше, чем fpDrawCircleCI). Если я попробую fpDrawPointCI, я не смогу принять вектор значений pch.

Я попытался

fn.ci_norm = c(fpDrawPointCI(pch=1), fpDrawPointCI(pch=19)

но это не сработало.

Итак, я попытался создать это в своем скрипте после загрузки библиотеки (forestplot), но до моей команды foresplot.

fpDrawPointCIfilled <- function (lower_limit, estimate, upper_limit, size,
    y.offset = 0.5, clr.line, clr.marker, lwd, lty = 1, vertices, 
    vertices.height = 0.1, pch = 16, ...) 
{
    prFpDrawLine(lower_limit = lower_limit, upper_limit = upper_limit, 
        clr.line = clr.line, lwd = lwd, lty = lty, y.offset = y.offset, 
        vertices = vertices, vertices.height = vertices.height)
    box <- convertX(unit(estimate, "native"), "npc", valueOnly = TRUE)
    if (box >= 0 && box <= 1) {
        if (!is.unit(size)) {
        size <- unit(size, "snpc")
    }
    grid.points(x = unit(estimate, "native"), y = unit(y.offset, 
        "npc"), size = size, pch = pch, gp = gpar(fill = clr.marker, 
        col = clr.marker))
}}

Он возвращает сообщение об ошибке Ошибка в fpDrawPointCIfilled(): не удалось найти функцию prFpDrawLine. Может ли кто-нибудь опубликовать пример того, как они изменили функции fpDrawNormalCI в лесном графике?

Спасибо, Крис


person Chris P    schedule 15.02.2017    source источник


Ответы (2)


Попробуйте использовать исходный чистый код и добавьте это:

meta.ci.pch = 21

(или любой другой код), чтобы задать размер и форму стилей точек. вы можете использовать ?points, чтобы увидеть все стили построения символов. Вы можете установить целый список стилей в объединенном списке, длина которого равна количеству графиков. Просто объедините:

meta.ci.pch = c(19, 3, 9)

Вы получите разные символы для каждого.

И я думаю, что вы можете изменить размер кругов с помощью:

circles.cex = 1.1   or   circles.cex = .8

или любое другое число, указывающее 110% размера по умолчанию или 80% размера по умолчанию. Но первый должен позволить вам использовать полые и заполненные формы.

person sconfluentus    schedule 16.02.2017

Устранение конкретной проблемы, с которой вы столкнулись, заключается в том, что функция prFpDrawLine не экспортируется из библиотеки форестплот; это внутренняя функция. Стандартное предупреждение состоит в том, что неэкспортированные функции могут быть изменены без предупреждения в будущих версиях библиотеки. Это сказало...

Если вы замените prFpDrawLine на forestplot:::prFpDrawLine, тройное двоеточие будет искать в библиотеке объекты, которые можно или нельзя экспортировать. В этом случае он найдет неэкспортированную функцию prFpDrawLine, и ваш код должен работать.

Счет

person Bill Denney    schedule 16.02.2017