2014-10-06 4 views
0

Я хотел бы отметить некоторые статистические данные на каждой коробке и вискере в решетке bwplot. Общий пример ниже.R-решетки Ярлыки для bwlotots

#---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)) 
    } 

) 

Это не работает - не знаю, почему я получаю этикетки говорят 45 вместо 100. Там должен быть способ, чтобы получить доступ вещи, как длина, среднее, медиана и так далее для каждого ящика и усов в каждом панель?

ответ

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