Неравные интервалы по оси Y - PullRequest
0 голосов
/ 06 октября 2019

Я хочу построить отношения опасности (ч) и доверительные интервалы из опубликованных итоговых данных, где у меня есть соответствующая публикация по оси X и отношения опасности по оси Y.

В настоящее время мой y-по оси указано: (-3, -2, -1, 0, 1, 2, 3), что дает «несимметричное» масштабирование хр.

Plot of HRs

Как сделатьЯ запрограммировал ось Y следующим образом: (0,3, 0,2, 0,1, 0, 1, 2, 3), что даст «правильное» масштабирование часов?

#require(plotrix)

#Create a data frame containing hr and confidence intervals 
mean <-       c(0.73, 0.7, 0.6, 0.74, 0.9, 0.96, 0.87, 0.74)
lowerlimit <- c(0.1, 0.4, 0.34, 0.29, 0.79, 0.86, 0.72, 0.57)
upperlimit <- c(5.55, 1.16, 0.99, 1.85, 1.03, 1.17, 1.04, 1.12)
df <- data.frame(cbind(upperlimit,lowerlimit, mean))

#Create a plot of the hr and CI for the respective publications
plot(df$mean, ylim = c(-3, 3), xlim = c(1,8), xaxt="n")

axis(1, at=seq(1:8), las=2,
 labels=c("study1", "study2", "study3", "study4", "study5", "study6", "study7", "study8"))

plotCI(df$mean, y=NULL, uiw=df$upperlimit, liw=df$lowerlimit, err="y", pch=20, slty=3, scol = "blue", add=TRUE)

Ps. Если изменение интервала невозможно, есть промежуточный шаг, в котором (1/lowerlimit) даст правильное масштабирование, но "неправильное число". Тогда жесткое кодирование оси Y может оказаться решением (пытались это безуспешно).

1 Ответ

1 голос
/ 06 октября 2019

Там может быть несколько способов сделать это. Вот мой ggplot подход. Вы можете одеть это соответственно.

Ваши данные

mean <-       c(0.73, 0.7, 0.6, 0.74, 0.9, 0.96, 0.87, 0.74)
lowerlimit <- c(0.1, 0.4, 0.34, 0.29, 0.79, 0.86, 0.72, 0.57)
upperlimit <- c(5.55, 1.16, 0.99, 1.85, 1.03, 1.17, 1.04, 1.12)
study <- c(1:8)
df <- data.frame(cbind(upperlimit,lowerlimit, mean, study))

Мой ggplot подход:

library(ggplot2)
labels <- paste("Study", c(1:8))
df %>% 
ggplot(aes(x = study, y= mean)) + 
  geom_point() + 
  geom_errorbar(aes(ymin = lowerlimit, ymax = upperlimit), width = 0.1) + 
  scale_y_log10() + 
  scale_x_continuous(breaks = c(1:8), labels = labels)

Вы получаете: enter image description here

...