Image.plot in R not displaying the scalecale value at the edges of the color scale

[ Here top images is output from R 3.2.5, the same code produces bottom image in R 2.15.2, notice the diff in color scale labels on the right side. I want to resolve the 'shift' of labels in the top plot. Sample code given in this query was used to generate both plots.

Note the difference in color scale in the two images. top image is the result from R 3.2.5, the same code creates the bottom image in R 2.15.2. I want to allow the "change" of labels in the upper graph, so that it matches the bottom. The sample code provided in this request was used to create both charts.

I am trying to build a map using image.plot, but the minimum and maximum colorscale values ​​do not display exactly on the hints. I ran into this problem in R version 3.2.5 (2016-04-14); Platform: x86_64-w64-mingw32 / x64 (64-bit version) and the library package fields "Spam version 1.4-0 (2016-08-29)

On the contrary, the same commands could correctly display the min and max values ​​at the edges of the color scale in R version 2.15.2 (2012-10-26), platform: x86_64-w64-mingw32 / x64 (64-bit) and "fields" 0.41- 0 (2014-02-26). Here is a sample code:

library(fields) temp <- matrix(data=rexp(200, rate=10), nrow=180, ncol=360) min(temp) max(temp) color_plate <- c("#FF0000", "#FF4D00", "#FF7000", "#FF8A00", "#FFA800", "#FFBF00", "#FFF000", "#FFFF54", "#AAFFFF","#7FFFFF", "#55FFFF", "#2AFFFF", "#00CFFF", "#20BFFF", "#209FFF", "#2060FF") zlim <- seq(0.08,0.40,by=0.04) temp[temp<min(zlim)] <- min(zlim) temp[temp>max(zlim)] <- max(zlim) image.plot(temp,col=color_plate, axis.args=list(cex.axis =1,at=zlim, labels=zlim,mgp=c(1, 0, 0),tck=0.1)) 
+7
r plot
source share
2 answers

I received a response from the package creator package. Insert example code for others.

 library(fields) temp <- matrix( seq( 0,.5,,80), 8,10) colTab <- c("#FF0000", "#FF4D00","#FF7000", "#FF8A00", "#FF7000") N<- length( colTab) breaks <- seq(0.08, 0.40, length.out= N+1 ) image.plot(temp, col=colTab, breaks=breaks, axis.args=list(cex.axis =1, at=breaks, labels= breaks, mgp=c(1, 0, 0), tck=0.1) ) 
+4
source share

The best I could do to answer this question was to avoid the limitations of image.plot() and transcode the heat map into ggplot2 . The code I wrote should move your tags to the appropriate locations. Note that "Var1" and "Var2" in the ggplot p object may switch depending on how you want to display the data. I used melt() to convert the temp object, which means the original row / column designation is lost. I was not sure what was built on the x / y axis in the image.plot() function, so if I chose the wrong one, be sure to switch to "Var1" and "Var2" .

Hope this helps!

 library(fields) library(reshape2) library(ggplot2) library(grid) temp <- matrix(data=rexp(200, rate=10), nrow=180, ncol=360) color_palette <- c("#FF0000", "#FF4D00", "#FF7000", "#FF8A00", "#FFA800", "#FFBF00", "#FFF000", "#FFFF54", "#AAFFFF","#7FFFFF", "#55FFFF", "#2AFFFF", "#00CFFF", "#20BFFF", "#209FFF", "#2060FF") zlim <- seq(0.08,0.40,by=0.04) zlim2 <- seq(0.08,0.40,by=0.02) temp[temp<min(zlim)] <- min(zlim) temp[temp>max(zlim)] <- max(zlim) rownames(temp) <- seq(0,1,1/(length(temp[,1])-1)) colnames(temp) <- seq(0,1,1/(length(temp[1,])-1)) tdm <- melt(temp) tdm$val_for_color <- NA ##can change this as long as you end up with 17 classes (labeled 1-17) for color assignment for(i in 1:(length(zlim2)-1)){ tdm$val_for_color[which(tdm$value >= zlim2[[i]] & tdm$value <= zlim2[[i+1]] )] <- i } p <- ggplot(tdm, aes(x = Var1, y = Var2, fill = val_for_color)) + geom_raster() + scale_fill_gradientn(breaks=seq(1,length(zlim),1),colors=color_palette, labels=zlim)+ scale_x_continuous(expand=c(0,0)) + scale_y_continuous(expand=c(0,0)) + guides(fill = guide_colorbar(draw.ulim = TRUE,draw.llim = FALSE, barwidth = 0.7, barheight = 10, limits=c(min(zlim),max(zlim)), raster=FALSE, ticks=FALSE, title=NULL))+ ylab(NULL)+ xlab(NULL)+ theme_bw() g <- ggplotGrob(p) #this shifts and spreads the labels d <-g$grobs[[15]][[1]][[1]]$grobs[[3]]$y[[1]] g$grobs[[15]][[1]][[1]]$grobs[[3]]$y[[1]] <- g$grobs[[15]][[1]][[1]]$grobs[[3]]$y[[1]]-d for(i in 2:length(g$grobs[[15]][[1]][[1]]$grobs[[3]]$y)){ g$grobs[[15]][[1]][[1]]$grobs[[3]]$y[[i]] <- d*5*(i-1) } grid.draw(g) 
+6
source share

All Articles