[R] Basic: setting resolution and size of an R graphic

From: Dr. med. Peter Robinson <peter.robinson_at_charite.de>
Date: Tue 25 Oct 2005 - 06:32:48 EST


Dear List,

I am sorry if this perhaps a too basic question, but I have not found an answer in Google or in the R help system. I am trying to use R to do a very simple analysis of some data (RT-PCR and Western analysis) with a T-test and
to plot the results as a histogram with error bars. (I have pasted an example script at the bottom of this mail). In order to use this for publication, I would like to adjust the resolution and size of the final image. However, even using file types such as postscript or pdf that are vector based, I get rather bad-looking results with

>pdf(file="test.pdf")
>source("script at bottom of mail")
>dev.off()

using either pdf or postscript or jpg devices.

Therefore I would like to ask the list, how to best produce a graphic from the script below that would fit into one column of a published article and have a high resolution (as eps, or failing that tiff or png)? Thanks in advance for any advice,

Peter

## Western.R
## A script to display the results of quantitative Western blotting with 6
repeats each at three dosages.
## This particular script has data from stimulation of fibroblasts with M-wt.

# ----------   CONVENIENCE FUNCTIONS --------------------- #

## Define a simple function to draw the error bars.
makeBars <- function(x,mean,se){
	segments(x,mean - se/2,x,mean+se/2)
	segments(x-0.1,mean - se/2,x+0.1,mean - se/2)
	segments(x-0.1,mean + se/2,x+0.1,mean + se/2)
	}

##Define a simple function to write p values writeP <- function(x,mean,se,pval) {
	if (pval >= 0.01) {
		# text(x, mean + se/2 + 0.25, sprintf('p=%.2f',pval),cex=1.5)
		text(x +0.05, mean + se/2 + 0.4, sprintf('*'),cex=1)
	} else {
		text(x +0.05, mean + se/2 + 0.4, sprintf('**'),cex=1)
		}
	}


## define function to draw entire group
## A,B,C refer to the x positions of the x,y,z observations
drawBarsAndPValueForGroup <-
function(A,B,C,x.mean,x.se,y.mean,y.se,z.mean,z.se,xy.pval,xz.pval) {

	makeBars(A,x.mean,x.se)
	makeBars(B,y.mean,y.se)
	makeBars(C,z.mean,z.se)
	writeP(B - 0.05, y.mean,y.se,xy.pval)
	writeP(C -0.05,z.mean,z.se,xz.pval)

}

## We will make a two part graphic

par(mfrow=c(1,2))

## X: 0
## y: 0.2 然
## z: 0.4 然

yTop <- 12 ## Limit for Y axis

## --- RT-PCR MMP1 --- ##
x <- c(0.8839034,0.42011158,0.65318013 , 0.88494528,1.900606, 1.2572536 ) x.mean <- mean(x)
x.se <- sd(x) / sqrt(length(x))
y <- c(5.067579666,2.630677502,1.881902881,1.61994864,3.356066695 ) y.mean <- mean(y)
y.se <- sd(y)/ sqrt(length(y))
z <-
c(13.38923048,3.677270765,3.559984278,10.83628903,12.20110874,12.8957108) z.mean <- mean(z)
z.se <- sd(z)/ sqrt(length(z))

## -- Do t test and calculate the p values -- ##
xy.t <- t.test(y,x, alternative=c("greater"),var.equal=TRUE) xy.pval <- xy.t$p.value

xz.t <- t.test(z, x, alternative=c("greater"),var.equal=TRUE) xz.pval <- xz.t$p.value

arr <- c(x.mean,y.mean,z.mean)
mat <- matrix(arr,nrow=3,byrow=F)

barplot(mat, ## The data

	beside=TRUE, ## juxtapose values in each column rather than stacking them
	ylim=c(0,yTop), ## limits for y axis
	xlim=c(0,3),
	width=1,
	space=c(0,0.1),##space: the amount of space (as a fraction of the average
bar width)
                            ##  left before each bar. beside=TRUE, can be
given
			    ## by 2 numbers, the space between bars within a group
			    ## and space betweens bars of different groups
	names=c('0.0 然','0.2 然','0.4 然'),
	ylab='Relative Change',
      col=c('white'),
      cex.names=1,
	cex.axis=1,##cex.axis: expansion factor for numeric axis labels.
	cex.lab=1)

## First for the RT-PCR group

start <- 0.1
first <- start + 0.5
second <- start + 1.5
third <- start + 2.5

drawBarsAndPValueForGroup(first,second,third,x.mean,x.se,y.mean,y.se,z.mean,z.se,xy.pval,xz.pval)

## --- Western MMP1 --- ##

x2 <- c(1.117373856,0.690266558,1.192359586 )
y2 <- c(3.53806369,3.895634049,6.653024511 )
z2 <- c(8.609814741,3.858564979,8.492977115)

x2.mean <- mean(x2)
x2.se <- sd(x2) / sqrt(length(x2))
y2.mean <- mean(y2)
y2.se <- sd(y2)/ sqrt(length(y2))

z2.mean <- mean(z2)
z2.se <- sd(z2)/ sqrt(length(2))

## -- Do t test and calculate the p values -- ##
xy2.t <- t.test(y2,x2, alternative=c("greater"),var.equal=TRUE) xy2.pval <- xy2.t$p.value

xz2.t <- t.test(z2,x2,alternative=c("greater"),var.equal=TRUE) xz2.pval <- xz2.t$p.value

arr <- c(x2.mean, y2.mean,z2.mean)
mat <- matrix(arr,nrow=3,byrow=F)

## mat now has the values of each type of experiment in individual columns

barplot(mat, ## The date

	beside=TRUE, ## juxtapose values in each column rather than stacking them
	ylim=c(0,yTop), ## limits for y axis
	xlim=c(0,4),
	width=1,
	space=c(0,0.1),##space: the amount of space (as a fraction of the average
bar width)
                            ##  left before each bar. beside=TRUE, can be
given
			    ## by 2 numbers, the space between bars within a group
			    ## and space betweens bars of different groups
	names=c('0.0 然','0.2 然','0.4 然'),
	ylab='Relative Change',
      col=c('white'),
      cex.names=0.8,
	cex.axis=1, ##cex.axis: expansion factor for numeric axis labels.
	cex.lab=1)


first <- 0.6
second <- first + 1
third <- first + 2
drawBarsAndPValueForGroup(first,second,third,x2.mean,x2.se,y2.mean,y2.se,z2.mean,z2.se,xy2.pval,xz2.pval)



R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html Received on Tue Oct 25 06:37:43 2005

This archive was generated by hypermail 2.1.8 : Fri 03 Mar 2006 - 03:40:47 EST