2016-04-17 9 views
1

Ich muss ein paar Rasterfiguren erstellen, aber die Farbrampenskala gleich halten, aber ich möchte auch, dass die Farbrampe einen glatten Verlauf hat. Ist es möglich, eine große Anzahl von Farben zu behalten (~ 100, um eine glatte Farbrampe zu haben), aber gleichzeitig eine angemessene Anzahl von Unterbrechungen zu haben, so dass es lesbar ist?Farbrampe mit der gleichen Farbskala über verschiedene Plots in R

library(raster) 
library(colorRamps) 

r1<- raster(ncol=56, nrow=26) 
r1[] <- runif(n=56*26,min=-20,max=15) 

r2<- raster(ncol=56, nrow=26) 
r2[] <- runif(n=56*26,min=-14,max=68) 


brk=seq(-50,70,length.out=100) 
col=matlab.like(100) 

plot(r1, breaks=brk, col=col) 
plot(r2, breaks=brk, col=col) 

In diesem Fall habe ich eine Farbrampe Ich wünsche, aber Sie können die Pausen-Etiketten nicht lesen enter image description here

Und wenn ich die Anzahl der Pausen zu verringern, wird die Farbe Rampe alle in einer Farbe

brk=seq(-50,70,length.out=6) 

enter image description here

Antwort

1

vielleicht finden Sie diese mit ggplot2 einfacher. Im folgenden Code ist der Schlüssel für jede Auftragung, die gleichen Farbwerte für low, mid und high und denselben limits in scale_fill_gradient2 festzulegen. Dies garantiert, dass die gleichen Datenwerte in jeder Zeichnung den gleichen Farben zugeordnet werden. Zum Beispiel:

library(rasterVis) 
library(ggplot2) 

# Reproducible rasters 
set.seed(4598) 
r1<- raster(ncol=56, nrow=26) 
r1[] <- runif(n=56*26,min=-20,max=15) 

r2<- raster(ncol=56, nrow=26) 
r2[] <- runif(n=56*26,min=-14,max=68) 

# Get range of data values across the two rasters 
rng = range(c(getValues(r1), getValues(r2))) 

gplot(r1) + 
    geom_tile(aes(fill=value)) + 
    ggtitle("r1") + 
    scale_fill_gradient2(low="red", mid="green", high="blue", 
         midpoint=mean(rng), # Value that gets the middle color (default is zero) 
         breaks=seq(-100,100,10), # Set whatever breaks you want 
         limits=c(floor(rng[1]), ceiling(rng[2]))) # Set the same limits for each plot 

gplot(r2) + 
    geom_tile(aes(fill=value)) + 
    ggtitle("r2") + 
    scale_fill_gradient2(low="red", mid="green", high="blue", 
         midpoint=mean(rng), # Value that gets the middle color (default is zero) 
         breaks=seq(-100,100,10), # Set whatever breaks you want 
         limits=c(floor(rng[1]), ceiling(rng[2]))) # Set the same limits for each plot 

enter image description here