ggplot多个构面和组合的x轴

时间:2018-11-12 20:39:03

标签: r ggplot2 axis facet

我正在尝试创建一个图表以跟踪几天中多个因素的结果。理想情况下,我希望我的x轴为“天”,该天号位于该特定日期代表的中间,y轴为结果,并且构面为手数(1-4)。由于重复的次数可能会有所不同,因此我很难使用可重复的文字来使这一天以底部为中心。

我使用的是本文Multi-row x-axis labels in ggplot line chart中显示的想法,但一直没有取得任何进展。

这是我一直在使用的一些代码以及到目前为止的内容。 x轴太忙了,我正在尝试合并它。

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 :(得分:0)

我不确定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))