小编vit*_*232的帖子

在ggplot2中更改栅格图的颜色

我试图使用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)

哪个,而不是所需的颜色渐变,产生这个:

ggplot2 scale_fill_gradient2()失败

任何建议都非常感谢!

gis plot r ggplot2

9
推荐指数
1
解决办法
1万
查看次数

为列表的每个元素创建一个单独的变量

我有一个数据框列表,它是通过一次读取 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”。有什么想法可以让我的方法奏效吗?有没有更简洁的方法来取消列出我的数据框?

r list

4
推荐指数
1
解决办法
2241
查看次数

雄辩地更改R中的许多栅格像元值

我有一个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编码器。

谢谢。

gis r raster spatial

3
推荐指数
1
解决办法
3449
查看次数

整数到POSIXlt

我开始处理基地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)

r posixlt

1
推荐指数
1
解决办法
3670
查看次数

标签 统计

r ×4

gis ×2

ggplot2 ×1

list ×1

plot ×1

posixlt ×1

raster ×1

spatial ×1