我有一个看起来像这样的栅格:
library(raster)
# Create data
set.seed(123)
r <- raster(ncols=10, nrows=10)
r[] <- sample(10:360, ncell(r),replace = T)
crs(r) <- "+proj=lcc +lat_1=48 +lat_2=33 +lon_0=-100 +ellps=WGS84"
projection(r)
plot(r)
对于每个网格,栅格包含一年中的某一天作为值。我正在寻找一种生成地图(可能是动画)的方法,从第1天到第365天,当地图到达与网格日相匹配的那天时,网格应该变为绿色。
我很抱歉,但由于我不知道在R中是否可能这样做,我无法制作我所尝试过的东西。
谢谢
修改
我能想到的一种方法是运行这样的循环:
for(i in 2:365){
breakpoints <- c(1,i,365)
colors <- c("green4","white")
plot(r, breaks = breakpoints,col=colors)
}
将每个循环的ouptut保存为.png,然后开发一个.gif图像
答案 0 :(得分:5)
使用循环,您可以将栅格reclassify
转换为二进制栅格(如果低于或等于当天,则为0,如果更高,则为1)。然后,您可以使用animation
包来创建gif。
library(animation)
ani.options(interval=.05)
saveGIF({
for (i in 1:365){
m <- c(1, i, 0, i, 365, 1)
rclmat <- matrix(m, ncol=3, byrow=TRUE)
rc <- reclassify(r, rclmat)
plot(rc, col=c("green3", "white"), legend=FALSE, main = paste("Day", i))
}
})
演示(200天)
答案 1 :(得分:2)
基于DJack的一些代码,你也可以使用Shiny来让用户选择一天。如果您的栅格具有适当的空间投影,则可以使用Leaflet在交互式地图上叠加栅格。
library(shiny)
library(shinydashboard)
library(ggplot2)
library(raster)
library(leaflet)
set.seed(123)
r <- raster(ncols=10, nrows=10)
r[] <- sample(10:360, ncell(r),replace = T)
crs(r) <- "+proj=lcc +lat_1=48 +lat_2=33 +lon_0=-100 +ellps=WGS84"
ui <- fluidPage(
titlePanel("Daily Raster!"),
# Sidebar layout with input and output definitions ----
sidebarLayout(
# Sidebar panel for inputs ----
sidebarPanel(
sliderInput(inputId = "bins", label = "Day", min = 1, max = 365, value = 1)
),
# Main panel for displaying outputs ----
mainPanel(
# Output: Histogram ----
leafletOutput(outputId = "Raster")
)
)
)
server <- function(input, output) {
output$Raster <- renderLeaflet({
m <- c(1, input$bins, 0, input$bins, 365, 1)
rclmat <- matrix(m, ncol=3, byrow=TRUE)
rc <- reclassify(r, rclmat)
leaflet() %>% addRasterImage(rc)
})
}
shinyApp(ui, server)