控制R中的栅格值的图例和颜色? [英] Controlling legend and colors for raster values in R?
问题描述
我正在尝试绘制ESRI网格作为表面的栅格图像.我已经弄清楚了如何绘制图,但没有找到如何控制R的色标.
I'm trying to plot an ESRI Grid as a raster image of a surface. I've figured out how to make the plot, but not how to control R's color scale.
# open necessary libraries
library("raster")
library("rgdal")
library("ncdf")
# goal: select an ESRI Grid ASCII file and plot it as an image.
infile <- file.choose("Results")
r <- raster(infile)
# read in metadata from ESRI output file, split up into relevant variables
info <- read.table(infile, nrows=6)
NCOLS <- info[1,2]
NROWS <- info[2,2]
XLLCORNER <- info[3,2]
YLLCORNER <- info[4,2]
CELLSIZE <- info[5,2]
NODATA_VALUE <- info[6,2]
XURCORNER <- XLLCORNER+(NCOLS-1)*CELLSIZE
YURCORNER <- YLLCORNER+(NROWS-1)*CELLSIZE
# plot output data - whole model domain
pal <- colorRampPalette(c("purple","blue","cyan","green","yellow","red"))
par(mar = c(5,5,2,4)) # margins for each plot, with room for colorbars
par(pin=c(5,5)) # set size of plots (inches)
par(xaxs="i", yaxs="i") # set up axes to fit data plotted
plot(r, xlim=c(XLLCORNER, XURCORNER), ylim=c(YLLCORNER, YURCORNER), ylab='UTM Zone 16 N Northing [m]', xlab='UTM Zone 16 N Easting [m]', col = pal(50))
"infile"的示例如下:
An example of the 'infile' would be something like this:
NCOLS 262
NROWS 257
XLLCORNER 304055.000
YLLCORNER 4792625.000
CELLSIZE 10.000
NODATA_VALUE -9999.000
42.4 42.6 42.2 0 42.2 42.8 40.5 40.5 42.5 42.5 42.5 42.9 43.0 ...
42.5 42.5 42.5 0 0 43.3 42.7 43.0 40.5 42.5 42.5 42.4 41.9 ...
42.2 42.7 41.9 42.9 0 0 43.7 44.0 42.4 42.5 42.5 43.3 43.2 ...
42.5 42.5 42.5 42.5 0 0 41.9 40.5 42.4 42.5 42.4 42.4 40.5 ...
41.9 42.9 40.5 43.3 40.5 0 41.9 42.8 42.4 42.4 42.5 42.5 42.5 ...
...
问题在于数据中的0值使色轴超出了对我有用的范围.见下文:
The problem is that the 0 values in the data stretch the color axis beyond what's useful to me. See below:
基本上,我想告诉R将色轴从25-45而不是0-50拉伸.我知道在Matlab中我会使用命令 caxis .R有类似的东西吗?
Basically, I would like to tell R to stretch the color axis from 25-45, rather than 0-50. I know in Matlab I would use the command caxis. Does R have something similar?
推荐答案
我使用数据集"volcano"生成了一个栅格对象,并使代码可再现.
I used the dataset "volcano" to generate a raster object, and to make the code reproducible.
Ope选项是离散化类别中的栅格值,然后,您可以控制每个类别中的值的范围.下面是两个示例:
Ope option is to discretize raster values in classes, then, you can control the range of values in each class. Two examples below:
1- 情节.
library(raster)
library(RColorBrewer)
r = raster(volcano) #raster object
cuts=c(100,150,160,170,180,190,200) #set breaks
pal <- colorRampPalette(c("white","black"))
plot(r, breaks=cuts, col = pal(7)) #plot with defined breaks
2- ggplot2
library(ggplot2)
library(raster)
library(RColorBrewer)
r = raster(volcano) #raster object
#preparing raster object to plot with geom_tile in ggplot2
r_points = rasterToPoints(r)
r_df = data.frame(r_points)
head(r_df) #breaks will be set to column "layer"
r_df$cuts=cut(r_df$layer,breaks=c(100,150,160,170,180,190,200)) #set breaks
ggplot(data=r_df) +
geom_tile(aes(x=x,y=y,fill=cuts)) +
scale_fill_brewer("Legend_title",type = "seq", palette = "Greys") +
coord_equal() +
theme_bw() +
theme(panel.grid.major = element_blank()) +
xlab("Longitude") + ylab("Latitude")
这篇关于控制R中的栅格值的图例和颜色?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!