star の vignette のより良いバージョンは、 https://r-spatial.github.io/stars/articles/ を参照。
この vignette は、tidyverseの動詞のいくつかを、stars
のオブジェクトに対してどのように使うことができるかを示している。
stars
と tidyverse
のパッケージは、以下の方法でロードされる。
library(stars)
## Loading required package: abind
## Loading required package: sf
## Linking to GEOS 3.11.0, GDAL 3.5.3, PROJ 9.1.0; sf_use_s2() is TRUE
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
現在、クラス stars
で利用可能なメソッドは次のとおりである。
methods(class = "stars")
## [1] [ [[<- [<- %in%
## [5] $<- adrop aggregate aperm
## [9] as_tibble as.data.frame as.POSIXct c
## [13] coerce contour cut dim
## [17] dimnames dimnames<- droplevels filter
## [21] hist image initialize is.na
## [25] Math merge mutate Ops
## [29] plot predict print pull
## [33] rename select show slice
## [37] slotsFromS3 split st_apply st_area
## [41] st_as_sf st_as_sfc st_as_stars st_bbox
## [45] st_coordinates st_crop st_crs st_crs<-
## [49] st_dimensions st_dimensions<- st_downsample st_extract
## [53] st_geometry st_interpolate_aw st_intersects st_join
## [57] st_mosaic st_normalize st_redimension st_sample
## [61] st_set_bbox st_transform_proj st_transform time
## [65] transmute write_stars
## see '?methods' for accessing help and source code
ここでは、ランドサット画像の3バンド区間を扱いる。
system.file("tif/L7_ETMs.tif", package = "stars") %>%
-> x
read_stars
x## stars object with 3 dimensions and 1 attribute
## attribute(s):
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## L7_ETMs.tif 1 54 69 68.91242 86 255
## dimension(s):
## from to offset delta refsys point x/y
## x 1 349 288776 28.5 SIRGAS 2000 / UTM zone 25S FALSE [x]
## y 1 352 9120761 -28.5 SIRGAS 2000 / UTM zone 25S FALSE [y]
## band 1 6 NA NA NA NA
slice
slice
はキューブから部分配列をスライスするこれは、作用する次元とスライス番号を指定することで行われる
{#slice-slice-slices-a-sub-array-out-of-the-cube;-this-is-done-by-specifying -the-dimension-on-which-to-act-and-the-slice-number.}
%>% slice(band, 6) -> x6
x
x6## stars object with 2 dimensions and 1 attribute
## attribute(s):
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## L7_ETMs.tif 1 32 60 59.97521 88 255
## dimension(s):
## from to offset delta refsys point x/y
## x 1 349 288776 28.5 SIRGAS 2000 / UTM zone 25S FALSE [x]
## y 1 352 9120761 -28.5 SIRGAS 2000 / UTM zone 25S FALSE [y]
スライス次元に沿って1つの要素が選択された場合、低次元の配列を返す。
filter
slice
と同様に、filter
は次元を選択するが、インデックスではなく値を評価する: in. {#filter-similar-to-slice-filter-selects-on-dimensions-but-evaluates-their-values -rather-than-their-index-in}
%>% filter(x > 289000, x < 291000, band > 3) -> x7
x
x7## stars object with 3 dimensions and 1 attribute
## attribute(s):
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## L7_ETMs.tif 5 54 70 71.79194 88 252
## dimension(s):
## from to offset delta refsys point x/y
## x 1 70 289004 28.5 SIRGAS 2000 / UTM zone 25S FALSE [x]
## y 1 352 9120761 -28.5 SIRGAS 2000 / UTM zone 25S FALSE [y]
## band 1 3 4 1 NA NA
の場合、X座標の値に基づいて部分配列が作成される。
なお、filter
はオブジェクトを tbl_cube
に変換し、dplyr
filter
メソッドを
tbl_cube
オブジェクトに対して使用する。これには、レクトリニア、カーブリニア、シンプルフィーチャのジオメトリを持つ
stars
オブジェクトは扱えないという制限がある。このようなオブジェクトには、通常の
[
選択を使用するか、st_crop
を使用することが代替となる場合がある。
pull
pull
は、star 形オブジェクトから配列を引き出する。
%>% pull(1) -> x8
x class(x8)
## [1] "array"
dim(x8)
## x y band
## 349 352 6
mutate
%>% mutate(band2 = 2 * L7_ETMs.tif) -> x2
x
x2## stars object with 3 dimensions and 2 attributes
## attribute(s):
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## L7_ETMs.tif 1 54 69 68.91242 86 255
## band2 2 108 138 137.82484 172 510
## dimension(s):
## from to offset delta refsys point x/y
## x 1 349 288776 28.5 SIRGAS 2000 / UTM zone 25S FALSE [x]
## y 1 352 9120761 -28.5 SIRGAS 2000 / UTM zone 25S FALSE [y]
## band 1 6 NA NA NA NA
select
select
は、属性または属性の集合を選択する。
%>% select(band2) -> x9
x2
x9## stars object with 3 dimensions and 1 attribute
## attribute(s):
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## band2 2 108 138 137.8248 172 510
## dimension(s):
## from to offset delta refsys point x/y
## x 1 349 288776 28.5 SIRGAS 2000 / UTM zone 25S FALSE [x]
## y 1 352 9120761 -28.5 SIRGAS 2000 / UTM zone 25S FALSE [y]
## band 1 6 NA NA NA NA
geom_stars
geom_raster
は、 geom 関数で、 の引数として
のオブジェクトを受け取り ggplot2
data
stars
ラスタまたはベクタの空間座標をプロットの寸法として設定し、最初の属性をフィル変数として設定する。
ダウンサンプリングが可能 (適切なダウンサンプリングレベルの選択なし)
ジオメトリが正方形、長方形、ベクタのいずれであるかによって、geom_raster
、geom_rect
、geom_sf
のいずれかを使用するか選択する。
使用例としては
library(ggplot2)
library(viridis)
## Loading required package: viridisLite
ggplot() +
geom_stars(data = x) +
coord_equal() +
facet_wrap(~band) +
theme_void() +
scale_fill_viridis() +
scale_x_discrete(expand = c(0, 0)) +
scale_y_discrete(expand = c(0, 0))