View Single Post
Old 05-15-2013, 09:19 PM   #2
Location: RTP, NC, USA

Join Date: Jun 2009
Posts: 28

In future, it would be good to post a reproducible example, like including a small dummy data.frame for the "gene_lens" example you described. I made one up just to test, but I have no idea what your real data looks like.
Easiest way to accomplish your goal is to add this to your plot() call:
which will turn off printing the y-axis during the plot() call. Make sure to add it to both plot() commands.
Then use the axis() function with your specific requirements:
axis(2, at=c(0, 500, 1000));
I suggest adding xaxt="n" to the second plot() command, and silencing the second xlab and ylab so they wouldn't double-plot the labels (makes them look bold-pixelated.) Lastly, I didn't know how you intended to handle overlapping lines, so I improvised on line widths so I could see everything. Here is what I came up with:
gene_lens <- data.frame("gene"=c(100,500,750,900),
plot(gene_lens$gene, gene_lens$control, type='h',
    xlab='base position', ylim=c(0,1000), ylab='read depth',
    col="skyblue3", yaxt="n", lwd=6);
plot(gene_lens$gene, gene_lens$IP, type='h', xlab='',
    ylim=c(0,1000), ylab='', col="red", yaxt="n",
    xaxt="n", lwd=2);
atN <- c(0, 500, 1000);
axis(2, at=atN, labels=format(atN, big.mark=","), las=2);
I added format() to the axis labels so the numbers are a little friendlier, the "las=2" part to make the axis labels perpendicular to the y-axis. Avoids people having to twist their heads sideways to read the labels. Makes them look like confused puppies. :-)

Lastly, I'm not sure I'm familiar with this type of plot, but it seems like you're going for a sort of bar chart? If so, you may try the barplot2() function in the gplots package, something like this:
barplot2(t(as.matrix(gene_lens[,c("control", "IP")])), beside=TRUE,
   names.arg=gene_lens$gene, xlab='base position', col=c("seagreen", "orange"),
   yaxt="n", ylim=c(0,1000));
axis(2, las=2, at=c(0,500,1000));
jmw86069 is offline   Reply With Quote