2012-06-15 24 views

Respuesta

5

Prueba de esto,

library(grid) 

png("mask.png") 
grid.polygon(c(-0.06, 0.06, 0.06, 0.15, 0, -0.15, -0.06), 
      c(-5, -5, 2.5, 2, 5, 2, 2.5), gp=gpar(fill="black"), 
      def="native", 
      vp=viewport(xs=c(-0.15, 0.15), ys=c(-5, 5))) 
dev.off() 

library(png) 
m <- readPNG("mask.png", native=FALSE) 
mask <- matrix(rgb(m[,,1],m[,,2],m[,,3]), 
       nrow=nrow(m)) 

rmat <- matrix(rgb(colorRamp(c("blue","white","red"))(seq(0,1,length=nrow(m))), maxColorValue=255), 
       nrow=nrow(m), ncol=ncol(m)) 
rmat[mask == "#FFFFFF"] <- NA 
grid.newpage() 
grid.raster(rmat) 

scrnsht

Editar: se puede reutilizar en una trama, p.ej

library(ggplot2) 
ggplot(iris) + geom_path(aes(Sepal.Length, Petal.Length, colour = Petal.Width)) + 
    guides(colour = guide_colourbar()) + 
    annotation_custom(rasterGrob(rmat, width=unit(1,"npc"), height=unit(1, "npc")), 
        x = 6, xmax=6.2, y=2.5, ymax=4) 

enter image description here

+0

Gran demostración de construir una máscara y luego colorear una imagen png con 'colorRamp'. Podría usarse en celosía y como un objeto independiente para pegar en otras aplicaciones. –

5

Creo que a Jim Lemon se le deben otorgar 10K, tal vez incluso 20K, puntos de reputación en SO solo en virtud de todo su trabajo a lo largo de los años creando soluciones de gráficos básicos. El chico es increíble. Una y otra vez, alguien pedirá algo a Rhelp y él preparará una solución. Aquí está la cortesía "arco iris al azar" de la página de ayuda:

require(plotrix) 
x<-c(0,cumsum(rnorm(99))) 
y<-c(0,cumsum(rnorm(99))) 
xydist<-sqrt(x*x+y*y) 
plot(x,y,main="Random walk plot",xlab="X",ylab="Y",type="n") 
color.scale.lines(x,y,c(1,1,0),0,c(0,1,1),colvar=xydist,lwd=2) 

enter image description here

+1

Por supuesto, el autor de 'qplot (x, y, color = xydist, geom =" path ")' de ggplot2 también tiene su propio fanclub. – baptiste

Cuestiones relacionadas