Подтвердить что ты не робот

Барплот в R/ggplot с несколькими факторами

У меня есть таблица, которую я хотел бы сделать в сюжете с использованием ggplot2, и пока я не был успешным. Я подготовил упрощенную таблицу, которая выглядит так:

df1<-data.frame(Loc=c(rep("L1",5),rep("L2",3),rep("L3",4)),
Type=c(rep("T1",3),rep("T2",2),"T1","T2","T2","T1","T1","T2","T2"),
       y2009=rep("A",12),y2010=c("A","B","A","A","A","A","B","B","A","A","B","B"),
       y2011=c("B","B","B","A","B",rep("B",4),"A","B","B"))
df1

Loc имеет 3 местоположения. Каждое место имеет 2 типа образцов T1 или T2. Они начинаются в 2009 году как A, а с течением времени некоторые становятся B. Итак, к 2011 году существует множество B.

Это цифра, которая у меня до сих пор

ggplot(df1,aes(x=Type)) + geom_bar()+facet_grid(~Loc)
ggplot(df1,aes(x=y2009,fill=Type)) + geom_bar(position="dodge")+facet_grid(~Loc)

enter image description hereenter image description here

Я не совсем уверен, как получить счет из трех факторов.

Мне нужна фигура, подобная приведенной ниже, которую я рисовал в краске. Границы - это местоположения, и я сделал бары только для Loc1 в качестве примера. enter image description here

4b9b3361

Ответ 1

Попробуйте многоуровневые грани:

df2 <- melt(df1, id.vars=c("Loc", "Type"))
ggplot(data=df2, aes(x=value, fill=Type)) + 
  geom_bar() + facet_wrap(~ Loc + variable, nrow=1)

enter image description here

Или, наоборот, facet_grid, который, я думаю, выглядит лучше, но не совсем соответствует вашему эскизу:

df2 <- melt(df1, id.vars=c("Loc", "Type"))
ggplot(data=df2, aes(x=value, fill=Type)) + 
  geom_bar() + facet_grid(Loc ~ variable)

enter image description here

Наконец, заимствуя из этого сообщения, вы можете попытаться лучше отличить местоположения по цвету (ясно, что цветовая схема может использовать какую-то работу, но вы понимаете суть):

df2 <- melt(df1, id.vars=c("Loc", "Type"))
ggplot(data=df2, aes(x=value, fill=Type)) + 
  geom_rect(aes(fill=Loc),xmin =-Inf,xmax=Inf,ymin=-Inf,ymax=Inf,alpha = 0.1) +
  geom_bar() +
  facet_wrap(~ Loc + variable, nrow=1)

enter image description here

Если вы хотите иметь отдельные панели для каждого местоположения, я думаю, вам нужно будет использовать собственные видовые экраны и грифы. Был пакет ggextra, который делал это так, но он, похоже, не доступен для самых последних версий R.