我试图在x轴上按比例正确绘制以下箱形图(以小时为单位)。我有以下脚本,几乎是正确的。它绘制数据,但没有在正确的小时时间绘制它。任何人都可以发现错误吗???
myf1 <- function(mydata1) { return(mean(mydata1,na.rm=TRUE))}
meanIn <- tapply(datIn$Measurement,list(as.factor(datIn$Measurement.location), as.factor(datIn$Total.run.hours.end.interval)),myf1)
myf2 <- function(mydata1) { quantile(mydata1,c(0.25),na.rm=TRUE) }
quIn2 <- tapply(datIn$Measurement,list(as.factor(datIn$Measurement.location), as.factor(datIn$Total.run.hours.end.interval)),myf2)
myf3 <- function(mydata1) { quantile(mydata1,c(0.75),na.rm=TRUE) }
quIn3 <- tapply(datIn$Measurement,list(as.factor(datIn$Measurement.location), as.factor(datIn$Total.run.hours.end.interval)),myf3)
myf4 <- function(mydata1,tquIn2,tquIn3) {
whisklow <- whiskup <- array(data=NA,dim=dim(tquIn2), dimnames=dimnames(tquIn2))
for ( ii in dimnames(tquIn2)[[1]] ) {
for ( jj in dimnames(tquIn2)[[2]] ) {
ttt <- mydata1$Measurement[as.character(mydata1$Measurement.location)==ii & as.character(mydata1$Total.run.hours.end.interval)==jj]
tlowv <- tquIn2[ii,jj] - 1.5 * (tquIn3[ii,jj]-tquIn2[ii,jj])
tupv <- tquIn3[ii,jj] + 1.5 * (tquIn3[ii,jj]-tquIn2[ii,jj])
if( !is.na(tlowv) ) {
whisklow[ii,jj] <- min(ttt[!(ttt <= tlowv)], na.rm=TRUE)
whiskup[ii,jj] <- max(ttt[!(ttt >= tupv)], na.rm=TRUE)
}
}
}
return(list(wl=whisklow, wu=whiskup))
}
whiskers <- myf4(mydata1=datIn,tquIn2=quIn2,tquIn3=quIn3)
whiskers
nIn <- tapply(datIn$Measurement,list(as.factor(datIn$Measurement.location), as.factor(datIn$Total.run.hours.end.interval)),length)
nIn
windows(12,8)
unitcolor <- c("green","red","black")
plot(1,1,type="n", xlim=c(-1000,50000), ylim=c(4,9),xlab="", ylab="")
# unit U6100
offs <- 1000
cc <- 1
for ( ii in dimnames(meanIn)[[2]] ) {
segments(x0=as.numeric(dimnames(meanIn)[[1]])-offs, x1=as.numeric(dimnames(meanIn)[[1]])+offs, y0=quIn2[,ii], y1=quIn2[,ii], col=unitcolor[cc])
segments(x0=as.numeric(dimnames(meanIn)[[1]])-offs, x1=as.numeric(dimnames(meanIn)[[1]])+offs, y0=quIn3[,ii], y1=quIn3[,ii], col=unitcolor[cc])
segments(x0=as.numeric(dimnames(meanIn)[[1]])-offs, x1=as.numeric(dimnames(meanIn)[[1]])+offs, y0=meanIn[,ii], y1=meanIn[,ii], col=unitcolor[cc])
segments(x0=as.numeric(dimnames(meanIn)[[1]])-offs, x1=as.numeric(dimnames(meanIn)[[1]])-offs, y0=quIn2[,ii], y1=quIn3[,ii], col=unitcolor[cc])
segments(x0=as.numeric(dimnames(meanIn)[[1]])+offs, x1=as.numeric(dimnames(meanIn)[[1]])+offs, y0=quIn2[,ii], y1=quIn3[,ii], col=unitcolor[cc])
segments(x0=as.numeric(dimnames(meanIn)[[1]]), x1=as.numeric(dimnames(meanIn)[[1]]), y0=quIn2[,ii], y1=whiskers$wl[,ii], col=unitcolor[cc])
segments(x0=as.numeric(dimnames(meanIn)[[1]]), x1=as.numeric(dimnames(meanIn)[[1]]), y0=quIn3[,ii], y1=whiskers$wu[,ii], col=unitcolor[cc])
cc <- cc + 1
}
# outliers
for ( ii in dimnames(quIn2)[[1]] ) {
cc <- 1
for ( jj in dimnames(quIn2)[[2]] ) {
ttt <- datIn$Measurement[as.character(datIn$Measurement.location)==ii & as.character(datIn$Total.run.hours.end.interval)==jj]
tttu <- ttt[ttt>whiskers$wu[ii,jj]]
tttl <- ttt[ttt<whiskers$wl[ii,jj]]
if ( length(tttu) > 0 ) { points(x=rep(as.numeric(ii),length(tttu)), y=tttu, col=unitcolor[cc]) }
if ( length(tttl) > 0 ) { points(x=rep(as.numeric(ii),length(tttl)), y=tttl, col=unitcolor[cc]) }
cc <- cc + 1
}
}
text(x=as.numeric(dimnames(nIn)[[1]]),y=rep(11,nrow(nIn)), labels=rowMeans(nIn,na.rm=TRUE), cex=0.75)
mtext(side=1, text="Total run hours before measurement", line=3, cex=1.5)
mtext(side=2, text="Measurement wall thickness [mm]", line=3, cex=1.5)
text(x=c(0,10000,20000), y=rep(16.75,3),labels=c("U6100","U6200","U6300"), col=unitcolor, cex=1.5)