ggplot несколько граней и объединенная ось x - PullRequest
0 голосов
/ 12 ноября 2018

Я пытаюсь создать график для отслеживания результатов по дням по нескольким факторам.В идеале я хотел бы, чтобы моим осем был день, с центром дня в центре повторений для этого конкретного дня, осью y, которая будет результатом, и фасетом будет Лот (1-4).У меня возникли проблемы с размещением дня по центру снизу с использованием повторяющегося текста, поскольку число повторений может варьироваться.

Я использовал идеи, показанные в этом посте: Многострочные метки оси x в ggplotлинейный график , но не смог добиться какого-либо прогресса.

Вот некоторый код, который я использовал, и сюжет, который у меня есть до сих пор.Ось х слишком занята, и я пытаюсь ее закрепить.

data <- data.frame(System = rep(c("A", "B"), each = 120), Lot = rep(1:4, each = 30),
               Day = rep(1:5, each = 6), Rep = rep(1:6, 40), Result = rnorm(240))

library(ggplot2)

ggplot(data, aes(x = interaction(Day, Rep, lex.order = TRUE), y = Result, color = System, group = System)) +
geom_point() +
geom_line() +
theme(legend.position = "bottom") + 
facet_wrap(~Lot, ncol = 1) +
geom_vline(xintercept = (which(data$Rep == 1 & data$Day != 1)), color = "gray60")

Plot so far

1 Ответ

0 голосов
/ 13 ноября 2018

Я не на 100% уверен, что это именно то, что вам нужно, но это будет центрировать день по оси X.

library(dplyr)
library(tidyr)
library(ggplot2)

df <- data.frame(System = rep(c("A", "B"), each = 120), Lot = rep(1:4, each = 30),
                   Day = rep(1:5, each = 6), Rep = rep(1:6, 40), Result = rnorm(240))

df <- df %>% 
     unite(Day_Rep, Day, Rep, sep = ".", remove = F) %>% 
     mutate(Day_Rep = as.numeric(Day_Rep))


ggplot(df, aes(x = Day_Rep, y = Result, color = System, group = System)) +
     geom_point() +
     geom_line() +
     theme(legend.position = "bottom") + 
     facet_wrap(~Lot, ncol = 1) +
     scale_x_continuous(labels = df$Day, breaks = df$Day + 0.5)+
     geom_vline(xintercept = setdiff(unique(df$Day), 1))
...