Hi, I'd really appreciate if someone could give me some help or advice about this - I've tried everything I know and am clueless about how to proceed! I've written a script to import ASCII data of raster maps, bin them into categories, calculate the mean values within these bins and plot the two in a simple graph. I'm running into problems with my x axis, as R cannot add the bin categories as labels and simply outputs the factor values of the number of bins. In much more detail: One set of data is fractional values for the amount of cropland in a designated area (raster cell). The second is annual average temperature data, in the same format. I import these using: xRaw<-scan(".../Temp.txt") yRaw<-scan(".../Cropland.txt") and then designate cells with values of -9999 as NAs: x<-ifelse(xRaw==-9999,NA,xRaw) y<-ifelse(yRaw==-9999,NA,yRaw) Then, I compile them into a 2 column data frame, and exclude the NA values: zRaw<-data.frame(x,y) z<-na.exclude(zRaw) I am then left with data frame 'z' which is a refined list of data. Using the 'cut' function, I assign each row into one of 69 different bins: z$bins<-cut(z$x, breaks=c(-36:33), include.lowest=TRUE) Each bin is now 1 degree Celsius wide. Within each one, I calculate the mean value of the corresponding fractional cropland data: a<-tapply(z$y, z$bins, mean) Object 'a' now contains each bin category and the associated mean cropland values, so 69 points in total. Now, a problem arises when I try and plot these values using: plot(a, xlab="Temperature", ylab="Fraction of Cropland", pch=20) What happens is that R intuitively labels my x-axis from 1-70, which corresponds to the bin factor values that were returned when the 'cut' function was used. I would like to simply label the x-axis with my temperature values, from -36 degrees to 33 degrees, instead of having numbers 1-69. How can I do this?? Thanks, Jeremy Proville M.Sc. Candidate Bioresource Engineering, McGill University -- View this message in context: http://www.nabble.com/Bin-Category-Labels-on-Axis-tp24042325p24042325.html Sent from the R help mailing list archive at Nabble.com.
The canonical method of creating a numeric value from a factor is to wrap the factor in as.numeric(as.character( (.)) The as.character grabs the value from the factor levels rahter than giving you the internal codings and the as.numeic finishes the job. Set xaxt=FALSE in the plot arguments. The axis can be managed with the axis() function with at= and labels= arguments. You might want to not plot every one of them, perhaps: at = seq(-36, 33, by = 5) , labels = as.numeric(as.factor(z $bins[seq(-36, 33, by = 5)] )), -- David Winsemius On Jun 15, 2009, at 7:09 PM, jproville wrote:> > Hi, > > I'd really appreciate if someone could give me some help or advice > about > this - I've tried everything I know and am clueless about how to > proceed! > > I've written a script to import ASCII data of raster maps, bin them > into > categories, calculate the mean values within these bins and plot the > two in > a simple graph. I'm running into problems with my x axis, as R > cannot add > the bin categories as labels and simply outputs the factor values of > the > number of bins. > > In much more detail: > One set of data is fractional values for the amount of cropland in a > designated area (raster cell). The second is annual average > temperature > data, in the same format. I import these using: > xRaw<-scan(".../Temp.txt") > yRaw<-scan(".../Cropland.txt") > > and then designate cells with values of -9999 as NAs: > x<-ifelse(xRaw==-9999,NA,xRaw) > y<-ifelse(yRaw==-9999,NA,yRaw) > > Then, I compile them into a 2 column data frame, and exclude the NA > values: > zRaw<-data.frame(x,y) > z<-na.exclude(zRaw) > > I am then left with data frame 'z' which is a refined list of data. > Using > the 'cut' function, I assign each row into one of 69 different bins: > z$bins<-cut(z$x, breaks=c(-36:33), include.lowest=TRUE) > > Each bin is now 1 degree Celsius wide. Within each one, I calculate > the mean > value of the corresponding fractional cropland data: > a<-tapply(z$y, z$bins, mean) > > Object 'a' now contains each bin category and the associated mean > cropland > values, so 69 points in total. > > > Now, a problem arises when I try and plot these values using: > plot(a, xlab="Temperature", ylab="Fraction of Cropland", pch=20) > What happens is that R intuitively labels my x-axis from 1-70, which > corresponds to the bin factor values that were returned when the 'cut' > function was used. I would like to simply label the x-axis with my > temperature values, from -36 degrees to 33 degrees, instead of having > numbers 1-69. How can I do this?? > > Thanks, > > Jeremy Proville > M.Sc. Candidate > Bioresource Engineering, McGill University > -- > View this message in context: http://www.nabble.com/Bin-Category-Labels-on-Axis-tp24042325p24042325.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.David Winsemius, MD Heritage Laboratories West Hartford, CT
David, It turns out that the 'at' argument takes the values 1,70,by=5, while the 'label' spans -36,33,by=5 Just took a little trial and error, but the graph now looks great. Cheers! Jeremy jproville wrote:> > Hi, > > I'd really appreciate if someone could give me some help or advice about > this - I've tried everything I know and am clueless about how to proceed! > > I've written a script to import ASCII data of raster maps, bin them into > categories, calculate the mean values within these bins and plot the two > in a simple graph. I'm running into problems with my x axis, as R cannot > add the bin categories as labels and simply outputs the factor values of > the number of bins. > > In much more detail: > One set of data is fractional values for the amount of cropland in a > designated area (raster cell). The second is annual average temperature > data, in the same format. I import these using: > xRaw<-scan(".../Temp.txt") > yRaw<-scan(".../Cropland.txt") > > and then designate cells with values of -9999 as NAs: > x<-ifelse(xRaw==-9999,NA,xRaw) > y<-ifelse(yRaw==-9999,NA,yRaw) > > Then, I compile them into a 2 column data frame, and exclude the NA > values: > zRaw<-data.frame(x,y) > z<-na.exclude(zRaw) > > I am then left with data frame 'z' which is a refined list of data. Using > the 'cut' function, I assign each row into one of 69 different bins: > z$bins<-cut(z$x, breaks=c(-36:33), include.lowest=TRUE) > > Each bin is now 1 degree Celsius wide. Within each one, I calculate the > mean value of the corresponding fractional cropland data: > a<-tapply(z$y, z$bins, mean) > > Object 'a' now contains each bin category and the associated mean cropland > values, so 69 points in total. > > > Now, a problem arises when I try and plot these values using: > plot(a, xlab="Temperature", ylab="Fraction of Cropland", pch=20) > What happens is that R intuitively labels my x-axis from 1-70, which > corresponds to the bin factor values that were returned when the 'cut' > function was used. I would like to simply label the x-axis with my > temperature values, from -36 degrees to 33 degrees, instead of having > numbers 1-69. How can I do this?? > > Thanks, > > Jeremy Proville > M.Sc. Candidate > Bioresource Engineering, McGill University >-- View this message in context: http://www.nabble.com/Bin-Category-Labels-on-Axis-tp24042325p24074354.html Sent from the R help mailing list archive at Nabble.com.