У меня есть базовый фрейм данных с 3 столбцами: (i) дата (когда была взята проба);(ii) местоположение участка и (iii) двоичная переменная, указывающая, каково было состояние при отборе проб (например, влажный или сухой).
Некоторые воспроизводимые данные:
df <- data.frame(Date = rep(seq(as.Date("2010-01-01"), as.Date("2010-12-01"), by="months"),times=2))
df$Site <- c(rep("Site.A",times = 12),rep("Site.B",times = 12))
df$Condition<- as.factor(c(0,0,0,0,1,1,1,1,0,0,0,0,
0,0,0,0,0,1,1,0,0,0,0,0))
Я хотел бы использовать ggplot для создания гистограммы, показывающей состояние каждого узла (ось y) во времени (ось x) -состояние указано другим цветом.Я предполагаю, что какой-то перевернутый барплот был бы способом сделать это, но я не могу понять, как сказать ggplot2 распознавать значения хронологически, а не суммировать для каждого условия.Пока это моя попытка, которая явно не делает то, что мне нужно.
ggplot(df) +
geom_bar(aes(x=Site,y=Date,fill=Condition),stat='identity')+coord_flip()
Итак, у меня есть 2 вопроса. Во-первых, как мне сказать ggplot распознавать изменения в состоянии с течением времени, а не просто группировать каждое условие в традиционной гистограмме с накоплением?
Во-вторых, кажется, что ggplot конвертирует датув числовое значение, как бы мне переформатировать ось х, чтобы показать период времени, например, в формате месяц-год? Я попытался сделать это с помощью функции scale_x_date, но получил сообщение об ошибке.
labDates <- seq(from = (head(df$Date, 1)),
to = (tail(df$Date, 1)), by = "1 months")
Datelabels <-format(labDates,"%b %y")
ggplot(df) +
geom_bar(aes(x=Site,y=Date,fill=Condition),stat='identity')+coord_flip()+
scale_x_date(labels = Datelabels, breaks=labDates)
Я также пытался преобразовать времена выборки в коэффициенты и отображать их вместо этого.Ниже я сделал это, изменив каждый период выборки на букву (в моем собственном коде уровни факторов представлены в формате месяц-год - для простоты я поставил здесь буквы).Но я не могу отформатировать ось, чтобы разместить каждый уровень фактора в виде отметки.Либо дата или фактор решения для этого второго вопроса было бы здорово!
df$Factor <- as.factor(unique(df$Date))
levels(df$Factor) <- list(A = "2010-01-01", B = "2010-02-01",
C = "2010-03-01", D = "2010-04-01", E = "2010-05-01",
`F` = "2010-06-01", G = "2010-07-01", H = "2010-08-01",
I = "2010-09-01", J = "2010-10-01", K= "2010-11-01", L = "2010-12-01")
ggplot(df) +
geom_bar(aes(x=Site,y=Date,fill=Condition),stat='identity')+coord_flip()+
scale_y_discrete(breaks=as.numeric(unique(df$Date)),
labels=levels(df$Factor))
Заранее спасибо!