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")))
PS: Я также убрал часть пуха из разговора.