r graphics -Создание баров для ненулевых значений на графиках решетки

У меня есть датафрейм

df <- data.frame(
  site=rep(c("s1","s2","s3"),3),
  grp=c("a","a","a","b","b","b","c","c","c"),
  total=c(0,1,2,0,4,6,8,0,2)
)

df

 site grp total
1   s1     a     0
2   s2     a     1
3   s3     a     2
4   s1     b     0
5   s2     b     4
6   s3     b     6
7   s1     c     8
8   s2     c     0
9   s3     c     2

#that I use to create the following lattice plot

library(lattice)

median<-with(df,reorder(grp,total,mean))
df$median<-median
df1<-subset(df,total!=0)

barchart(df$site~total|median,data=df, xlim=c(0,10), col="grey", border="NA", 
         par.settings=list(axis.text=list(cex=0.85), fontsize=list(text=10)), 
         par.strip.text=list(cex=0.9), par.strip.col="white", layout = c(3,2), 
         aspect = (0.3),scales=list(y=list(relation="free"))
)

Я хотел бы распределить столбцы равномерно, а также расположить их, уменьшив df$total для каждого уровня df$grp (то есть,b,c). Есть идеи? Спасибо

2 ответа

df$median<-median
df1<-subset(df,total!=0)

затем используйте df1 но, может быть, я что-то упустил

С помощью df1 это было предоставлено в другом ответе, плюс некоторые пользовательские препанели и панели:

barchart(site ~ total | median, data = df1, 
         prepanel = function(x, y, ...) {
           xx <- reorder(droplevels(y), x)
           list(ylim = levels(xx),
                yat = sort(unique(as.numeric(xx))))
         },
         panel = function(x, y, ...) {
           xx <- reorder(droplevels(y), x)
           panel.barchart(x, xx, ...)
         }, scales = list(y = list(relation = "free")))

Imgur

PS: Я также убрал часть пуха из разговора.

Другие вопросы по тегам