I'll reply to my own post - to make sure no one wastes his/her time on that. I was able to solve the problem only after I modified the original function interaction.plot (see below). All I did I added one line before the final } - asking it to return the means on the numeric (dependent) variable. After that, the following code worked:
d=data.frame(xx=c(1,1,1,1,2,2,2,2,3,3,3,3),yy=c(3,3,4,4,3,3,4,4,3,3,4,4),zz=c(-1.1,-1.3,0,0.6,-0.5,1,3.3,-1.3,4.4,3.5,5.1,3.5)) d[[1]]<-as.factor(d[[1]]) d[[2]]<-as.factor(d[[2]]) print(d) coordinates<-modified.interaction.plot(d$xx, d$yy, d$zz, fun=mean, type="b", col=c("red","blue"), legend=F, lty=c(1,2), lwd=2, pch=c(18,24), xlab="X Label (level of xx)", ylab="Y Label (level of zz)", main="Chart Label") grid(nx=NA, ny=NULL,col = "lightgray", lty = "dotted", lwd = par("lwd"), equilogs = TRUE) legend("bottomright",c("3","4"),bty="n",lty=c(1,2),lwd=2, pch=c(18,24),col=c("red","blue"),title="Level of yy") coordinates<-as.data.frame(coordinates) str(coordinates) for(i in 1:length(coordinates)) { text(x=as.numeric(row.names(coordinates)),y=coordinates[[i]],labels=coordinates[[i]],pos=3) } ### Modified interaction.plot function ### modified.interaction.plot=function (x.factor, trace.factor, response, fun = mean, type = c("l", "p", "b"), legend = TRUE, trace.label = deparse(substitute(trace.factor)), fixed = FALSE, xlab = deparse(substitute(x.factor)), ylab = ylabel, ylim = range(cells, na.rm = TRUE), lty = nc:1, col = 1, pch = c(1:9, 0, letters), xpd = NULL, leg.bg = par("bg"), leg.bty = "n", xtick = FALSE, xaxt = par("xaxt"), axes = TRUE, ...) { ylabel <- paste(deparse(substitute(fun)), "of ", deparse(substitute(response))) type <- match.arg(type) cells <- tapply(response, list(x.factor, trace.factor), fun) nr <- nrow(cells) nc <- ncol(cells) xvals <- 1:nr if (is.ordered(x.factor)) { wn <- getOption("warn") options(warn = -1) xnm <- as.numeric(levels(x.factor)) options(warn = wn) if (!any(is.na(xnm))) xvals <- xnm } xlabs <- rownames(cells) ylabs <- colnames(cells) nch <- max(sapply(ylabs, nchar, type = "width")) if (is.null(xlabs)) xlabs <- as.character(xvals) if (is.null(ylabs)) ylabs <- as.character(1:nc) xlim <- range(xvals) xleg <- xlim[2] + 0.05 * diff(xlim) xlim <- xlim + c(-0.2/nr, if (legend) 0.2 + 0.02 * nch else 0.2/nr) * diff(xlim) matplot(xvals, cells, ..., type = type, xlim = xlim, ylim = ylim, xlab = xlab, ylab = ylab, axes = axes, xaxt = "n", col = col, lty = lty, pch = pch) if (axes && xaxt != "n") { axisInt <- function(x, main, sub, lwd, bg, log, asp, ...) axis(1, x, ...) mgp. <- par("mgp") if (!xtick) mgp.[2] <- 0 axisInt(1, at = xvals, labels = xlabs, tick = xtick, mgp = mgp., xaxt = xaxt, ...) } if (legend) { yrng <- diff(ylim) yleg <- ylim[2] - 0.1 * yrng if (!is.null(xpd) || { xpd. <- par("xpd") !is.na(xpd.) && !xpd. && (xpd <- TRUE) }) { op <- par(xpd = xpd) on.exit(par(op)) } text(xleg, ylim[2] - 0.05 * yrng, paste(" ", trace.label), adj = 0) if (!fixed) { ord <- sort.list(cells[nr, ], decreasing = TRUE) ylabs <- ylabs[ord] lty <- lty[1 + (ord - 1)%%length(lty)] col <- col[1 + (ord - 1)%%length(col)] pch <- pch[ord] } legend(xleg, yleg, legend = ylabs, col = col, pch = if (type %in% c("p", "b")) pch, lty = if (type %in% c("l", "b")) lty, bty = leg.bty, bg = leg.bg) } invisible() return(cells) } On Wed, Mar 4, 2009 at 3:48 PM, Dimitri Liakhovitski <ld7...@gmail.com> wrote: > Thank you, David, however, I am not sure this approach works. > Let's try it again - I slightly modifed d to make it more clear: > > d=data.frame(xx=c(1,1,1,1,2,2,2,2,3,3,3,3),yy=c(3,3,4,4,3,3,4,4,3,3,4,4),zz=c(-1.1,-1.3,0,0.6,-0.5,1,3.3,-1.3,4.4,3.5,5.1,3.5)) > d[[1]]<-as.factor(d[[1]]) > d[[2]]<-as.factor(d[[2]]) > print(d) > > interaction.plot(d$xx, d$yy, d$zz, fun=mean, > type="b", col=c("red","blue"), legend=F, > lty=c(1,2), lwd=2, pch=c(18,24), > xlab="X Label (level of xx)", > ylab="Y Label (level of zz)", > main="Chart Label") > > grid(nx=NA, ny=NULL,col = "lightgray", lty = "dotted", > lwd = par("lwd"), equilogs = TRUE) > > legend("bottomright",c("3","4"),bty="n",lty=c(1,2),lwd=2, > pch=c(18,24),col=c("red","blue"),title="Level of yy") > > > The dots on both lines show means on zz for a given combination of > factors xx and yy. > > # If I add this line: > with(d, text(xx,zz,paste(zz))) > It adds the zz values for ALL data points in d - instead of the means > that are shown on the graph... > Any advice? > > Dimitri > > > d=data.frame(xx=c(3,3,3,2,2,2,1,1,1),yy=c(4,3,4,3,4,3,4,3,4),zz=c(5.1,4.4,3.5,3.3,-1.1,-1.3,0,-0.5,0.6)) > d[[1]]<-as.factor(d[[1]]) > d[[2]]<-as.factor(d[[2]]) > print(d) > > interaction.plot(d$xx, d$yy, d$zz, fun=mean, > type="b", col=c("red","blue"), legend=F, > lty=c(1,2), lwd=2, pch=c(18,24), > xlab="X Label", > ylab="Y Label", > main="Chart Label") > > grid(nx=NA, ny=NULL,col = "lightgray", lty = "dotted", > lwd = par("lwd"), equilogs = TRUE) > > legend("bottomright",c("0.25","0.50","0.75"),bty="n",lty=c(1,2,3),lwd=2, > pch=c(18,24,22),col=c(PrimaryColors[c(6,4)],SecondaryColors[c(4)]),title="R > Squared") > > > On Wed, Mar 4, 2009 at 2:06 PM, David Winsemius <dwinsem...@comcast.net> > wrote: >> See if this helps. After your code, submit this to R: >> >> with(d, text(xx[xx==3],zz[xx==3],paste("3, ",zz[xx==3]))) >> >> After that has convinced you that xx and zz are being used properly, you >> can try the more general approach: >> >> with(d, text(xx,zz,paste(xx, " , ", zz))) >> >> I would have used ZZ rather than "Y Label" on the y axis, because yy is >> being used as a grouping parameter and the plotted value is really zz >> >> -- >> David Winsemius >> >> On Mar 4, 2009, at 11:52 AM, Dimitri Liakhovitski wrote: >> >>> Hello - and sorry for what might look like a simple graphics question. >>> >>> I am building an interaction plot for d: >>> >>> >>> d=data.frame(xx=c(3,3,2,2,1,1),yy=c(4,3,4,3,4,3),zz=c(5.1,4.4,3.5,3.3,-1.1,-1.3)) >>> d[[1]]<-as.factor(d[[1]]) >>> d[[2]]<-as.factor(d[[2]]) >>> print(d) >>> >>> interaction.plot(d$xx, d$yy, d$zz, >>> type="b", col=c("red","blue"), legend=F, >>> lty=c(1,2), lwd=2, pch=c(18,24), >>> xlab="X Label", >>> ylab="Y Label", >>> main="Chart Label") >>> >>> I am trying and not succeeding in adding Y values (value labels in >>> Excel speak) near the data points on 3 lines of the graph. >>> I understand that I might have to use "text". But how do I tell text >>> to use the actual coordinates of the dots on the lines? >>> >>> >>> Thank you very much! >>> >>> -- >>> Dimitri Liakhovitski >>> MarketTools, Inc. >>> dimitri.liakhovit...@markettools.com >>> >>> ______________________________________________ >>> R-help@r-project.org mailing list >>> https://stat.ethz.ch/mailman/listinfo/r-help >>> PLEASE do read the posting guide >>> http://www.R-project.org/posting-guide.html >>> and provide commented, minimal, self-contained, reproducible code. >> >> > > > > -- > Dimitri Liakhovitski > MarketTools, Inc. > dimitri.liakhovit...@markettools.com > -- Dimitri Liakhovitski MarketTools, Inc. dimitri.liakhovit...@markettools.com ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.