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

Dr. med. Peter Robinson peter.robinson at charite.de
Mon Oct 24 22:32:48 CEST 2005


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 µM
## z: 0.4 µM

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 µM','0.2 µM','0.4 µM'),
	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 µM','0.2 µM','0.4 µM'),
	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)




More information about the R-help mailing list