дополнительная ось в блочной диаграмме в r

У меня есть данные ниже:

df1 <- read.table(text = "ID Group Value time
A1 A 21 10
A2 A 79 20
A3 A 32 30
B1 B 105 40
B2 B 44 50
B3 B 58 60
C1 C 32 70
C2 C 66 80
C3 C 143 90", stringsAsFactors = FALSE, header = TRUE)

С данными я строю блочную диаграмму, используя функцию ggboxplot:

library(ggpubr)

ggboxplot(data=df1,x="Group",y="Value",add = "jitter",short.panel.labs = FALSE)

и мой сюжет выглядит так: введите здесь описание изображения

Теперь я хотел бы добавить дополнительную ось в верхней части графика, поместив точки на графике для перестановки на основе столбца time в df1, что я должен был сделать примерно так:

введите здесь описание изображения

Это возможно?


person Lennon Lee    schedule 22.02.2019    source источник


Ответы (1)


Если вы не полагаетесь на ggboxplot(), есть решение с базовым сюжетом.

boxplot(Value ~ Group, df1, xlim=c(.4, 3.5),
        xlab="Group", ylab="Value")
points(df1$time/100*3.5, df1$Value, pch=16)
axis(3, seq(0, 3.5, length.out=11), 0:10*10)
mtext("time", 3, 3)

Пояснение

Сначала мы делаем обычную коробчатую диаграмму и немного расширяем ось Y с xlim() влево (которая в противном случае начинается с 0,5). Затем мы накладываем график с points(), масштабируя вторичную ось x ("time") до диапазона [0, 3,5] оси x диаграммы. Затем мы добавляем ось и маркируем ее, и, наконец, мы добавляем метку для вторичной оси X с помощью mtext().

Результат

введите здесь описание изображения

Данные

df1 <- structure(list(ID = c("A1", "A2", "A3", "B1", "B2", "B3", "C1", 
"C2", "C3"), Group = c("A", "A", "A", "B", "B", "B", "C", "C", 
"C"), Value = c(21L, 79L, 32L, 105L, 44L, 58L, 32L, 66L, 143L
), time = c(10L, 20L, 30L, 40L, 50L, 60L, 70L, 80L, 90L)), class = "data.frame", row.names = c(NA, 
-9L))
person jay.sf    schedule 22.02.2019
comment
спасибо за ваш ответ, кстати, у вас есть какие-либо предложения по поводу сетки из двух участков, может быть, я могу построить это лучше, настроив сетки - person Lennon Lee; 22.02.2019
comment
Что именно вы подразумеваете под сетками? - person jay.sf; 22.02.2019
comment
Я имею в виду, что если я могу знать точное положение графика, я могу лучше настроить положение точек. - person Lennon Lee; 22.02.2019
comment
Ага. Да, boxplot() имеет эту замечательную функцию, также дающую такую ​​сетку. Просто выполните g <- boxplot(.), и он даст вам и график, и сетку, сохраненную в g. Ok? - person jay.sf; 22.02.2019