Rev 9509 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
# Interactive density plots. Based on TCL version by Guido Masarottorequire(tcltk) || stop("tcltk support is absent")local({y <- NULLxlim <-NULLbw <- 1 # in case replot.maybe is called too earlyreplot <- function(...) {if (is.null(y)) return() # too early...bw <<- b <- as.numeric(tclvar$bw)k <- tclvar$kernelsz <- as.numeric(tclvar$size)eval(substitute(plot(density(y, bw=b,kernel=k),xlim=xlim)))points(y,rep(0,sz))}replot.maybe <- function(...){if (as.numeric(tclvar$bw) != bw) replot()}regen <- function(...) {if (tclvar$dist==1) y<<-rnorm(as.numeric(tclvar$size))else y<<-rexp(as.numeric(tclvar$size))xlim <<- range(y) + c(-2,2)replot()}base <- tktoplevel()tkwm.title(base, "Density")spec.frm <- tkframe(base,borderwidth=2)left.frm <- tkframe(spec.frm)right.frm <- tkframe(spec.frm)frame1 <- tkframe(left.frm, relief="groove", borderwidth=2)tkpack(tklabel(frame1, text="Distribution"))tkpack(tkradiobutton(frame1, command=regen, text="Normal",value=1, variable="dist"), anchor="w")tkpack(tkradiobutton(frame1, command=regen, text="Exponential",value=2, variable="dist"), anchor="w")frame2 <- tkframe(left.frm, relief="groove", borderwidth=2)tkpack(tklabel(frame2, text="Kernel"))for ( i in c("gaussian", "epanechnikov", "rectangular","triangular", "cosine") ) {tmp <- tkradiobutton(frame2, command=replot,text=i, value=i, variable="kernel")tkpack(tmp, anchor="w")}frame3 <-tkframe(right.frm, relief="groove", borderwidth=2)tkpack(tklabel(frame3, text="Sample size"))for ( i in c(50,100,200,300) ) {tmp <- tkradiobutton(frame3, command=regen,text=i,value=i,variable="size")tkpack(tmp, anchor="w")}frame4 <-tkframe(right.frm, relief="groove", borderwidth=2)tkpack(tklabel (frame4, text="Bandwidth"))tkpack(tkscale(frame4, command=replot.maybe, from=0.05, to=2.00,showvalue=F, variable="bw",resolution=0.05, orient="horiz"))tkpack(frame1, frame2, fill="x")tkpack(frame3, frame4, fill="x")tkpack(left.frm, right.frm,side="left", anchor="n")q.but <- tkbutton(base,text="Quit",command=function()tkdestroy(base))tkpack(spec.frm, q.but)tclvar$size <- 50tclvar$dist <- 1tclvar$kernel<- "gaussian"tclvar$bw <- 1regen()})