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), но перед моей командой forestplot.
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 в лесном участке?
Спасибо Крис
2 ответа
Попробуйте использовать свой исходный чистый код и добавьте это:
meta.ci.pch = 21
(или любой другой код), чтобы установить размер и форму для стиля точек. ты можешь использовать ?points
чтобы увидеть все стили прорисовки персонажей. Вы можете установить полный список стилей в объединенном списке, который будет равным количеству графиков. Просто объединить:
meta.ci.pch = c(19, 3, 9)
Вы получите разные символы для каждого.
И я думаю, что вы можете изменить размер кругов с:
circles.cex = 1.1 or circles.cex = .8
или любое другое число, указывающее 110% от размера по умолчанию или 80% от размера по умолчанию. Но первое должно позволить вам использовать пустотелые и заполненные формы.
Устранение конкретной проблемы, с которой вы столкнулись, заключается в том, что функция prFpDrawLine не экспортируется из библиотеки лесных участков; это внутренняя функция. Стандартное предупреждение заключается в том, что функции, которые не были экспортированы, могут изменяться без предупреждения в будущих версиях библиотеки. Это сказал...
Если вы замените prFpDrawLine
с forestplot:::prFpDrawLine
тройное двоеточие будет искать в библиотеке объекты, которые можно или нельзя экспортировать. В этом случае он найдет неэкспортированную функцию prFpDrawLine
и твой код должен работать.
Билл