Как добавить прозрачные серые полосы на лесной участок? - PullRequest
0 голосов
/ 26 июня 2019

Я создаю лесной участок с forestplot пакетами в R

С помощью этого блога (https://www.r -bloggers.com / forest-plot-with-Horizontal-band / ), я едва сделал лесной участок.Однако в пакетах forestplot оператор hzrl_lines работал не так, как я хочу.

Я хочу сделать прозрачные серые полосы на моем лесном участке, перекрывая текст.Но в операторе hzrl_lines он охватывает только две строки, а не одну.Например, на следующем рисунке я хочу охватить «возраст», то есть заголовок категории.

hrzl_lines=list("4" = gpar(lwd=60, lineend="butt", columns=c(1:5), col="#99999922"))

Как видите, горизонтальная линия охватывает «первичный анализ» и заголовок категории «возраст».Центр строки находится между первичным анализом и возрастным заголовком.

enter image description here

Как охватить единственный заголовок «Возраст»?Я использовал код ниже.Я очень ценю вашу помощь.

library("forestplot")

datafile <- file.path("example.csv")
data <- read.csv(datafile, stringsAsFactors=FALSE)
np <- ifelse(!is.na(data$total), data$total, NA)
nc <- ifelse(!is.na(data$intervention), data$intervention, NA)
nu <- ifelse(!is.na(data$control), data$control, NA)


tabletext <- cbind(c("Subgroup","\n",data$category), 
                    c("No. of\nPatients","\n",np), 
                    c("intervention","\n",np), 
                    c("control","\n",nu),
                    c("Interaction\n P Value","\n",data$prob))
tabletext

names(data)
png(file.path("example.png"),width=750, height=750)
forestplot(labeltext=tabletext, 
           mean=c(NA,NA,data$estimate), 
           lower=c(NA,NA,data$lcl), upper=c(NA,NA,data$ucl),
           hrzl_lines=list("3" = gpar(lwd=1, col="#000000"),
                           "4" = gpar(lwd=60, lineend="butt", columns=c(1:5), col="#99999922")),
           xticks=c(-40,-30,-20,-10,0,10),
           clip=c(-40,10),
           col=fpColors(box="black", lines="black", zero = "gray50"))

dev.off()

Кроме того, rawdata, как показано ниже.Трудно загрузить CSV-файл в stackoverflow.

> dput(data)
structure(list(category = c("Primary analysis", "Age", "   60-", 
"   20-40", "   -20", "Sex", "   Female", "   Male", "", "", 
"", "", "", "", "", "", ""), total = c(100L, NA, NA, 40L, 60L, 
NA, 40L, 60L, NA, NA, NA, NA, NA, NA, NA, NA, NA), intervention = c(50L, 
NA, NA, 20L, 30L, NA, 20L, 30L, NA, NA, NA, NA, NA, NA, NA, NA, 
NA), control = c(50L, NA, NA, 20L, 30L, NA, 20L, 30L, NA, NA, 
NA, NA, NA, NA, NA, NA, NA), estimate = c(-17.5, NA, NA, -12, 
-20, NA, -15, -20, NA, NA, NA, NA, NA, NA, NA, NA, NA), lcl = c(-25L, 
NA, NA, -25L, -30L, NA, -22L, -35L, NA, NA, NA, NA, NA, NA, NA, 
NA, NA), ucl = c(-10L, NA, NA, 1L, -10L, NA, -8L, -5L, NA, NA, 
NA, NA, NA, NA, NA, NA, NA), prob = c(NA, 0.5, NA, NA, NA, 0.5, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA)), class = "data.frame", row.names = c(NA, 
-17L))

enter image description here

1 Ответ

0 голосов
/ 27 июня 2019

В приведенном вами примере URL у автора всегда было 3 строки, покрытые горизонтальной полосой.Он добился этого, используя средний и придав ему широкую линию, охватывающую все 3 линии.hrzl_lines предназначен для создания линии в текущей строки, поэтому вы всегда будете видеть ее центр между строками.Единственный обходной путь, который я смог найти для вас, это добавить пустую строку ниже вашей строки Age, а затем добавить серую прозрачную полосу:

library("forestplot")

#Create empty df row
emptyRow <- data.frame(X1 = NA, X2 = NA, X3 = NA, X4 = NA, X5 = NA, X6 = NA, X7 = NA, X8 = NA)
names(emptyRow) <- names(data)

#Insert empty row below the 'Age' line
data <- rbind(data[c(1:2),], emptyRow, data[c(3:17),])

np <- ifelse(!is.na(data$total), data$total, NA)
nc <- ifelse(!is.na(data$intervention), data$intervention, NA)
nu <- ifelse(!is.na(data$control), data$control, NA)

tabletext <- cbind(c("Subgroup","\n",data$category), 
                   c("No. of\nPatients","\n",np), 
                   c("intervention","\n",np), 
                   c("control","\n",nu),
                   c("Interaction\n P Value","\n",data$prob))

png(file.path("example.png"),width=750, height=750)
forestplot(labeltext=tabletext, 
           mean=c(NA,NA,data$estimate), 
           lower=c(NA,NA,data$lcl), upper=c(NA,NA,data$ucl),
           hrzl_lines=list("3" = gpar(lwd=1, col="#000000"),
                           "5" = gpar(lwd=50, lineend="butt", columns=c(1:5), col="#99999922")),
           xticks=c(-40,-30,-20,-10,0,10),
           clip=c(-40,10),
           col=fpColors(box="black", lines="black", zero = "gray50"))
dev.off()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...