Можем ли мы раскрасить разные строки / ковариаты / исследования в разные цвета на лесных участках R?

Используя пакет forestplot на языке программирования R, я хотел бы создать лесной график, на котором каждая строка была бы разного цвета. Под каждой строкой я подразумеваю прямоугольники и соответствующие доверительные интервалы.

Взяв пример из виньетки [https://cran.r-project.org/web/packages/forestplot/vignettes/forestplot.html],  введите описание изображения здесь

library(forestplot)
# Cochrane data from the 'rmeta'-package
cochrane_from_rmeta <- 
  structure(list(
    mean  = c(NA, NA, 0.578, 0.165, 0.246, 0.700, 0.348, 0.139, 1.017, NA, 0.531), 
    lower = c(NA, NA, 0.372, 0.018, 0.072, 0.333, 0.083, 0.016, 0.365, NA, 0.386),
    upper = c(NA, NA, 0.898, 1.517, 0.833, 1.474, 1.455, 1.209, 2.831, NA, 0.731)),
    .Names = c("mean", "lower", "upper"), 
    row.names = c(NA, -11L), 
    class = "data.frame")

tabletext <- cbind(c("", "Study", "Auckland", "Block", "Doran", "Gamsu", "Morrison", "Papageorgiou", "Tauesch", NA, "Summary"),
  c("Deaths", "(steroid)", "36", "1", "4", "14", "3", "1", "8", NA, NA),
  c("Deaths", "(placebo)", "60", "5", "11", "20", "7", "7", "10", NA, NA),
  c("", "OR", "0.58", "0.16", "0.25", "0.70", "0.35", "0.14", "1.02", NA, "0.53"))

forestplot(tabletext, cochrane_from_rmeta, new_page = TRUE,
           is.summary = c(TRUE, TRUE, rep(FALSE, 8), TRUE),
           clip = c(0.1,2.5), xlog = TRUE, 
           col = fpColors(box="royalblue",line="darkblue", summary="royalblue"))

Я хочу, чтобы у каждого исследования был свой цвет (Окленд может быть окрашен в синий цвет, Блок может быть окрашен в красный цвет, Доран может быть окрашен в зеленый цвет и так далее). Я думаю, что этого можно добиться, изменив аргумент функции fpColors ().

Есть какой-либо способ сделать это?


person Skywalker    schedule 29.10.2020    source источник
comment
Из документации или исходного кода не кажется, что это возможно (ну, это возможно, но, вероятно, было бы слишком сложно, чтобы оправдать его - определение функций для каждого цвета, который вы хотите пройти и т. д.)   -  person Allan Cameron    schedule 29.10.2020
comment
Да, я тоже так думал ... Однако ответ Mr_Z работает нормально!   -  person Skywalker    schedule 30.10.2020


Ответы (1)


Взгляните на fpShapesGp. Благодаря этому можно раскрасить строки в разные цвета.

Простой пример вашего кода:

styles <- fpShapesGp(
  lines = list(
    gpar(col = "black"),
    gpar(col = "blue"),
    gpar(col = "black"),
    gpar(col = "blue"),
    gpar(col = "black"),
    gpar(col = "blue"),
    gpar(col = "black"),
    gpar(col = "blue"),
    gpar(col = "black"),
    gpar(col = "blue"),
    gpar(col = "black")
  ),
  box = list(
    gpar(fill = "black"),
    gpar(fill = "blue"),
    gpar(fill = "black"),
    gpar(fill = "blue"),
    gpar(fill = "black"),
    gpar(fill = "blue"),
    gpar(fill = "black"),
    gpar(fill = "blue"),
    gpar(fill = "black"),
    gpar(fill = "blue"),
    gpar(fill = "black")
  ) 
)

forestplot(tabletext, cochrane_from_rmeta, new_page = TRUE,
           is.summary = c(TRUE, TRUE, rep(FALSE, 8), TRUE),
           clip = c(0.1,2.5), xlog = TRUE, 
           shapes_gp = styles)

В результате вы получите следующее:  введите описание изображения здесь

person Mr_Z    schedule 29.10.2020
comment
Да, это именно то, что я искал! - person Skywalker; 30.10.2020