qqthin: a version of qqplot() that thins out points that overplot In hddplot: Use Known Groups in High-Dimensional Data to Derive Scores for Plots

Description

QQ-plots with large numbers of points typically generate graphics files that are unhelpfully large. This function handles the problem by removing points that are, for all practical purposes, redundant

Usage

 ```1 2 3``` ```qqthin(x, y, ends = c(0.01, 0.99), eps = 0.001, xlab = deparse(substitute(x)), adj.xlab = NULL, ylab = deparse(substitute(y)), show.line = TRUE, print.thinning.details=TRUE, centerline = TRUE, ...) ```

Arguments

 `x` ordered values of `x` will be plotted on the x-axis `y` ordered values of `y` will be plotted on the y-axis `ends` outside these cumulative proportions of numbers of points, all points will be included in the graph `eps` controls the extent of overplotting `xlab` label for x-axis `adj.xlab` positioning of x-label `ylab` label for y-axis `show.line` logical; show the line y=x? `print.thinning.details` logical; print number of points after thinning? `centerline` logical; draw a line though the part of the graph where some points have been omitted? `...` additional graphics parameters

Value

Gives a qqplot. The number of points retained is returned invisibly.

John Maindonald

References

~put references to the literature/web site here ~

Examples

 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59``` ```mat <- matrix(rnorm(1000), ncol=20) cl <- factor(rep(1:3, c(7,9,4))) Fstats <- aovFbyrow(x = mat, cl = cl) qqthin(qf(ppoints(length(Fstats)), 2, 17), Fstats, eps=0.01) ## The function is currently defined as function(x, y, ends=c(.01,.99), eps=0.001, xlab = deparse(substitute(x)), adj.xlab=NULL, ylab = deparse(substitute(y)), show.line=TRUE, print.thinning.details=TRUE, centerline=TRUE, ...){ ## qqthin() is a substitute for qqplot(), that thins ## out plotted points from the region where they are ## dense. Apart from the overlaid curve that shows ## the region where points have been thinned, it may ## be hard to distinguish the result of qqthin() ## from that of qqplot() xlab <- xlab ylab <- ylab x <- sort(x) y <- sort(y) dx<-diff(x) epsdist <- sqrt(diff(range(x))^2+diff(range(y))^2)*eps dx<-0.5*(c(dx[1],dx)+c(dx,dx[length(dx)])) dy<-diff(y) dy<-0.5*(c(dy[1],dy)+c(dy,dy[length(dy)])) dpoints <- epsdist/sqrt(dx^2+dy^2) ## dpoints is a local measure of the number of points ## per unit distance along the diagonal, with the unit ## set to approximately eps*(length of diagonal) dig<-floor(dpoints)+1 ## dig is, roughly, the number of points per unit distance. ## We wish to retain one point per unit distance. For this ## retain points where cdig rounds to an integer. For such ## points, cdig has increased by approx 1, relative to the ## previous point that is retained. cdig<-round(cumsum(1/dig)) subs<-match(unique(cdig), cdig) if(is.null(adj.xlab)) plot(x[subs], y[subs], xlab=xlab, ylab=ylab) else { plot(x[subs], y[subs], xlab="", ylab=ylab) mtext(side=1, xlab, adj=adj.xlab, line=par()\$mgp[1]) } if(any(diff(subs)>1)){ n1 <- min(subs[c(diff(subs),0)>1]) n2 <- max(subs[c(0,diff(subs))>1]) ns1 <- match(n1, subs) ns2 <- match(n2, subs) if(print.thinning.details) print(paste("Graph retains", length(subs), "points.")) if(centerline) lines(smooth.spline(x[subs[ns1:ns2]], y[subs[ns1:ns2]]), col="grey", lwd=2) } if(show.line)abline(0, 1, col="red") invisible(length(subs)) } ```

hddplot documentation built on Sept. 3, 2017, 5:02 p.m.