我试图使用ggplot2而不是光栅包绘图功能制作光栅图,原因有些不相关.
我想缩放颜色,使图上的最低温度为蓝色,图上的最高温度为红色,而中间范围为白色.我已经尝试了ggplot2的众多功能,但我一直未能获得理想的结果.这就是我要的:

这是我的ggplot2代码的当前状态:
library(raster)
library(ggplot2)
library(scales)
r = raster()
r[] = 1:ncell(r)
df = as.data.frame(r, xy=TRUE)
the_plot = ggplot(df) +
geom_raster(aes(x, y, fill=layer)) +
scale_fill_gradient2(low=muted('red'), mid='white', high=muted('blue'))
print(the_plot)
Run Code Online (Sandbox Code Playgroud)
哪个,而不是所需的颜色渐变,产生这个:

任何建议都非常感谢!
我有一个数据框列表,它是通过一次读取 25 个 .csv 文件生成的。我想取消列出数据框以开始空间分析。也就是说,我希望列表的每个元素都有单独的数据框。
我试过了unlist(),但它没有产生我想要的结果。我也尝试了一种方法lapply(),但它会产生错误。这是我尝试过的:
x <- 1:3
y <- 4:6
l <- lapply(1:2, function(x){data.frame(x, y)})
lapply(1:length(l), function(i){paste('df', i, sep = '') <- data.frame(l[[i]])})
Run Code Online (Sandbox Code Playgroud)
问题似乎在于将数据框分配给粘贴的名称。包裹它as.character()没有帮助。
这确实有效:
"df1" <- data.frame(l[[1]])
Run Code Online (Sandbox Code Playgroud)
问题似乎出在我的paste()函数输出中的某个地方,但输出中有str()“chr”。有什么想法可以让我的方法奏效吗?有没有更简洁的方法来取消列出我的数据框?
我有一个Landfire现有植被数据集(http://www.landfire.gov/),已经将其投影并裁剪到了我的研究站点。栅格具有约12,000,000个像元。像元值代表特定的植被类型,值的范围为16:2200。所有这些值均未在我的研究范围内表示(即,值从20跳到1087)。
由于出于我的目的,许多像素的值可以归为一类(例如,将不同的灌木丛划分为一类),因此我想将栅格的值重置为更简单的值(1:11)。这将有助于根据植被类型轻松地从其他栅格中提取数据,并易于绘制分类图。我有一个有效的代码,但需要大量输入才能更改我需要更改的所有61个值。这是我所做的:
#===============================
############Example#############
#===============================
library(raster)
r <- raster(nrows=30, ncols=10, xmn=0, xmx=10)
r[] <- rep(10:19, 30)
r.omance <- function(x){
x[x==10] <- 1; x[x==11] <- 1; x[x==12] <- 1
x[x==13] <- 1; x[x==14] <- 1; x[x==15] <- 1
x[x==16] <- 2; x[x==17] <- 2; x[x==18] <- 2
x[x==19] <- 2
return(x)}
reclass <- calc(r, fun = r.omance)
Run Code Online (Sandbox Code Playgroud)
有谁知道解决这个问题的更简单方法?您可以想象键入会更改61个值,尤其是因为x [x == 16:20] <-1会产生错误,因此每个值都必须分别键入。如我所说,我的代码有效。但是我只是想成为一个更好的R编码器。
谢谢。
我开始处理基地R如何处理日期/时间,但仍有一些不确定性.
使用以下数据集(从气象数据中发挥作用),我能够使用该as.character()函数转换为POSIXct和POSIXlt .Date.Time以yymmddhhmm格式提供.
Date.Time <- c(1107151300, 1107151400, 1107151500, 1107151600, 1107151700, 1107151800)
WindSpd <- c(11.8, 14.5, 14.9, 14.1, 15.2, 17.1)
##Using as.character()##
#Note POSIXlt this time
w <- data.frame(Date.Time, WindSpd)
w$Date.Time <- as.POSIXlt(as.character(w$Date.Time), format = '%y%m%d%H%M',
origin = '2011-07-15 13:00:00')
w
#Now POSIXct
x <- data.frame(Date.Time, WindSpd)
x$Date.Time <- as.POSIXct(as.character(x$Date.Time), format = '%y%m%d%H%M',
origin = '2011-07-15 13:00:00')
x
Run Code Online (Sandbox Code Playgroud)
但是,为了转换为日期,将整数转换为字符似乎很愚蠢.当我尝试直接转换整数时,我得到所有NA值.
##Trying to coerce the intergers##
#note POSIXlt this time
y <- data.frame(Date.Time, WindSpd)
y$Date.Time <- as.POSIXlt(y$Date.Time, format = '%y%m%d%H%M',
origin …Run Code Online (Sandbox Code Playgroud)