Yong,
You might want to check out the cookbook and FAQ's. We have put a lot of code for sorting different problems and frequent requests.
PCA: viewtopic.php?f=26&t=124
PLS: viewtopic.php?f=26&t=123
Heatmaps: viewtopic.php?f=26&t=385&p=1233#p1233
As for the cloud plot, it came out along side online xcms and has not been included into xcms.
I've put a little code together below for something similar however, things like the m/z scale of the points, m/z y-axis (currently showing intensity) and continuous RT plot could probably use some playing with to make it more suitable. For the RT plot I just used a mean Intensity across all samples. I did this pretty quickly, so improvements could be easyly found. You could also wrap it into the playwith package or the googleviz package to use for identification of which point is which
makePseudoCloud<-function(fill, classA, classB, pval){
require(xcms)
diff<-diffreport(fill, classA, classB, eicmax=0, file=NULL)
gr<-groups(fill)
d<-ncol(gr)
rtmed<-gr[,"rtmed"]
dat<-data.frame(X=c(rtmed, rtmed), Y=c(rowMeans(diff[,(d+6):ncol(diff)]), -(rowMeans(diff[,(d+6):ncol(diff)])) ))
plot(dat, type="h")
abline(0,0) ## make the plot
ix<-which(diff[,"pvalue"] < pval)
fold<-max(diff[ix,"fold"])
m.mz<-max(diff[,"mzmed"])
m.int<-max(dat[,"Y"])
for(i in ix){
if(diff[i, "tstat"] > 0){
foo<-(diff[i,"mzmed"]/m.mz)*m.int
#foo<-mean(as.numeric(diff[i,(d+6):ncol(diff)]))
points(diff[i,"rtmed"], foo, col="blue", pch=16, cex=5*(diff[i,"fold"]/max(fold)) )
} else if(diff[i, "tstat"] < 0){
foo<-(diff[i,"mzmed"]/m.mz)*m.int
points(diff[i,"rtmed"], -foo, col="red", pch=16, cex=5*(diff[i, "fold"]/max(fold) ))
}
}
}