Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

R matrix plot with colour threshold and grid

my matrix consists of values between 0 and 100 and has the dimensions of 100 x 100. I basically want to plot this matrix but colour all values above 50 in e.g. red and below in e.g. blue. On top of that I'd like to add a nice grayisch grid like they do it here with ggplot:

http://learnr.wordpress.com/2009/07/15/ggplot2-version-of-figures-in-lattice-multivariate-data-visualization-with-r-part-5/

I am wondering what's the easiest way to achieve that? I am not sure if I want to give ggplot a try as it looks pretty complicated from what I have seen so far. Isn't there any other easy plot function for such a task?

like image 564
user969113 Avatar asked Dec 27 '22 19:12

user969113


2 Answers

In base graphics it is just:

image(x, col=c("red","blue")[1+(x>50)] )

To add the grid use:

grid(nx=100, ny=100, lty=1)
like image 67
IRTFM Avatar answered Jan 07 '23 09:01

IRTFM


I am not 100% sure if your data is in a matrix and you want a heatmap type plot. Or if it is in some other form and you want a scatterplot like those you link to. I just assumed your data is as described and that you want a heatmap. I imagine it is something like:

   x=abs(rnorm(100*100,50,25))
    x=matrix(x,nrow=100)

So I would reshape the data so it looks like xy coordinates with:

require(reshape2)
require(ggplot2)
x1=melt(x)
names(x1)=c("x","y","color")

Then I would make my cutoff into a factor:

x1$color=factor(x1$color>50)
levels(x1$color)=c("lessthan50","more than 50")

Then call ggplot with:

qplot(x, y, fill=color, data=x1,geom='tile')

enter image description here

like image 31
Seth Avatar answered Jan 07 '23 09:01

Seth