问题
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?
回答1:
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')
回答2:
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)
回答3:
You can do it simply enough with levelplot,
x <- abs(runif(100*100,0, 100))
x <- matrix(x,nrow=100)
levelplot(x, cuts=1, col.regions=c("red", "blue"))
来源:https://stackoverflow.com/questions/12081843/r-matrix-plot-with-colour-threshold-and-grid