Hello, I am having a problem where code that plots lines using a different data frame plots bars with the current data frame (I am intended to plot lines). The code specifies lines (see below), so I can't figure out why the results are bars. I suspect that it may have something to do with the fact that in the data frame where the code worked as intended, the both variables specifying different lines were numeric, whereas in the current data frame one of those variables (challenge) is a factor with 2 levels. Any suggestions for getting this to plot as intended would be much appreciated. Thank you! ************ This is meant to plot a separate line for each subject for each challenge************* for (subj in unique(lab.samples$subid)) { #par(new=T) plot.new() par(mfrow=c(2,1)) par(mfg=c(1,1)) plot(data=lab.samples, subset=(subid==subj), cortisol ~ Sample, type='n', main=paste('Cortisol and Amylase for subject ', as.character(subj))) for ( t in unique(subset(lab.samples,subid==subj)$challenge) ) { par(mfg=c(1,1)) lines(data=lab.samples, subset=(subid==subj & challenge==t), cortisol ~ Sample, type='b', pch=as.character(t), col=rainbow(2)[t]) } par(mfg=c(2,1)) plot(data=lab.samples, subset=(subid==subj), amylase ~ Sample, type='n') for ( t in unique(subset(lab.samples,subid==subj)$challenge) ) { par(mfg=c(2,1)) lines(data=lab.samples, subset=(subid==subj & challenge==t), amylase ~ Sample, type='b', pch=as.character(t), col=heat.colors(2)[t]) } } -- View this message in context: http://r.789695.n4.nabble.com/plot-function-creating-bars-instead-of-lines-tp4580765p4580765.html Sent from the R help mailing list archive at Nabble.com.
R. Michael Weylandt
2012-Apr-24 00:04 UTC
[R] plot function creating bars instead of lines
It is indeed the fact you're plotting factors, but unless you say what "as intended" is, it's hard to provide exactly what you're seeking. Perhaps this will help though: X <- factor(sample(letters[1:5], 15, TRUE)) Y <- rnorm(15) dats <- data.frame(X, Y) plot(Y ~ X, data = dats) # No good plot(X ~ Y, data = dats) # Also probably not what you want plot(Y ~ as.numeric(X), data = dats) # Good but ugly lables plot(Y ~ as.numeric(X), data = dats, xaxt = "n", xlab = "X") axis(1, at = seq_along(levels(X)), labels = levels(X)) # Good But perhaps easier is library(ggplot2) qplot(X,Y, dats) Michael On Mon, Apr 23, 2012 at 11:25 AM, la mer <melissarosenkranz at gmail.com> wrote:> Hello, > > I am having a problem where code that plots lines using a different data > frame plots bars with the current data frame (I am intended to plot lines). > The code specifies lines (see below), so I can't figure out why the results > are bars. I suspect that it may have something to do with the fact that in > the data frame where the code worked as intended, the both variables > specifying different lines were numeric, whereas in the current data frame > one of those variables (challenge) is a factor with 2 levels. Any > suggestions for getting this to plot as intended would be much appreciated. > > Thank you! > > ************ This is meant to plot a separate line for each subject for each > challenge************* > for (subj in unique(lab.samples$subid)) { > ? ? ? ?#par(new=T) > ? ? ? ?plot.new() > ? ? ? ?par(mfrow=c(2,1)) > ? ? ? ?par(mfg=c(1,1)) > ? ? ? ?plot(data=lab.samples, subset=(subid==subj), cortisol ~ Sample, type='n', > ? ? ? ? ? ? ? ?main=paste('Cortisol and Amylase for subject ', as.character(subj))) > > ? ? ? ?for ( t in unique(subset(lab.samples,subid==subj)$challenge) ) { > ? ? ? ? ? ? ? ?par(mfg=c(1,1)) > ? ? ? ? ? ? ? ?lines(data=lab.samples, subset=(subid==subj & challenge==t), > ? ? ? ? ? ? ? ? ? ? ? ?cortisol ~ Sample, type='b', pch=as.character(t), col=rainbow(2)[t]) > ? ? ? ?} > ? ? ? ?par(mfg=c(2,1)) > ? ? ? ?plot(data=lab.samples, subset=(subid==subj), amylase ~ Sample, type='n') > ? ? ? ?for ( t in unique(subset(lab.samples,subid==subj)$challenge) ) { > ? ? ? ? ? ? ? ?par(mfg=c(2,1)) > ? ? ? ? ? ? ? ?lines(data=lab.samples, subset=(subid==subj & challenge==t), > ? ? ? ? ? ? ? ? ? ? ? ?amylase ~ Sample, type='b', pch=as.character(t), col=heat.colors(2)[t]) > ? ? ? ?} > } > > > -- > View this message in context: http://r.789695.n4.nabble.com/plot-function-creating-bars-instead-of-lines-tp4580765p4580765.html > Sent from the R help mailing list archive at Nabble.com. > > ______________________________________________ > R-help at 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.
On 04/24/2012 01:25 AM, la mer wrote:> Hello, > > I am having a problem where code that plots lines using a different data > frame plots bars with the current data frame (I am intended to plot lines). > The code specifies lines (see below), so I can't figure out why the results > are bars. I suspect that it may have something to do with the fact that in > the data frame where the code worked as intended, the both variables > specifying different lines were numeric, whereas in the current data frame > one of those variables (challenge) is a factor with 2 levels. Any > suggestions for getting this to plot as intended would be much appreciated. > > Thank you! > > ************ This is meant to plot a separate line for each subject for each > challenge************* > for (subj in unique(lab.samples$subid)) { > #par(new=T) > plot.new() > par(mfrow=c(2,1)) > par(mfg=c(1,1)) > plot(data=lab.samples, subset=(subid==subj), cortisol ~ Sample, type='n', > main=paste('Cortisol and Amylase for subject ', as.character(subj))) > > for ( t in unique(subset(lab.samples,subid==subj)$challenge) ) { > par(mfg=c(1,1)) > lines(data=lab.samples, subset=(subid==subj& challenge==t), > cortisol ~ Sample, type='b', pch=as.character(t), col=rainbow(2)[t]) > } > par(mfg=c(2,1)) > plot(data=lab.samples, subset=(subid==subj), amylase ~ Sample, type='n') > for ( t in unique(subset(lab.samples,subid==subj)$challenge) ) { > par(mfg=c(2,1)) > lines(data=lab.samples, subset=(subid==subj& challenge==t), > amylase ~ Sample, type='b', pch=as.character(t), col=heat.colors(2)[t]) > } > } >Hi la mer, Without any data it is a bit difficult, but I would first try using as.numeric(challenge). I tried faking some data: lab.samples<-data.frame(subid=rep(1:10,each=4), amylase=runif(40),cortisol=runif(40), Sample=rep(1:4,10),challenge=factor(rep(c("t","f"),20))) but got nothing on the plots. Jim