2014-10-06 5 views
0

격자 bwplot의 각 상자 및 위스커에 대한 통계 중 일부에 레이블을 지정하고 싶습니다. 아래의 일반적인 예입니다. R 격자 bwplots에 대한 레이블

#---Some dummy data 
Rock<-c("Rock1","Rock2","Rock3") 
Zone<-as.data.frame(c("Zone10","Zone11","Zone12")) 
Domain<-as.data.frame(c("Domain1","Domain2")) 
Dt <- as.data.frame(rnorm(100)) 
Dt<-merge(Dt,Zone) 
Dt<-merge(Dt,Rock) 
Dt<-merge(Dt,Domain) 
names(Dt)<-c("Data","Zone","Rock","Domain") 

#--- Use aggregate to get the number of values for each combination of three factors (100 each) 
aggregate(Data~Rock*Zone*Domain,Dt,FUN=length) 

require(lattice) 
#--- create a lattice plot and attempt to label the number of value associated with each BnW 
bwplot(Rock~Data|Zone*Domain, 
    data=Dt, 
    xlim=c(-5,5), 
     panel=function(...){ 
     panel.bwplot(...) 
     panel.text(-4,c(1,2,3),length(x)) 
    } 

) 

은 작동하지 않습니다 - 확실하지 내가 각 각 상자와 수염에 대한 등등 거기에, 길이 등의 작업에 액세스 의미하는 방법, 중간이어야하며 대신 100의 45을 말하는 라벨을 얻고있다 이유 패널?

답변

0

필자는 값을 직접 계산해야한다고 생각합니다. 예를 들어 plyr 패키지 (예 : 집계로 계속 작업 할 수도 있음)를 사용하면 쉽게 값을 계산할 수 있습니다.

library(plyr) 
agg=ddply(Dt,c("Zone","Rock","Domain"),summarise,length=length(Data), max=max(Data),median=median(Data)) # max or median or ... to have the xvalues were you want to plot the values of length 

require(lattice) 
bwplot(Rock~Data|Zone*Domain, 
    data=Dt, 
    xlim=c(-5,5), 
    panel=function(...){ 
    panel.bwplot(...) 
    panel.text(agg$max+1,c(1,2,3),agg$length) # plus one to not mask the last dot 
    } 
    ) 
+0

이 질문에 대한 신속한 해결책을 가져 주셔서 대단히 감사드립니다. 그러나 각 패널의 상자와 수염마다 다른 수의 데이터가 있었고 데이터가없는 레벨이있는 ​​실제 데이터 예제에서는 제대로 작동하지 않는다는 것을 알았습니다. 그러나이 솔루션은 번호 레이블이 각 패널의 상자 및 수염 그림의 수와 일치해야한다는 것을 알게되면서 올바른 방향으로 나를 분명하게 지적했습니다. "if (packet.number() == 1) {ltext ("등)을 사용하여 각 패널의 레이블 집합을 설정하면 레이블을 올바른 위치로 설정하고 올바른 시퀀스를 설정할 수 있습니다. – Markm0705