2016-03-18 10 views
8

ggplot2を使用して空間ラスターをプロットしようとしています。ラスターとggplotマップがかなり整列していないR

require(raster) 
require(ggplot2) 

データをダウンロードするには、rasterパッケージを使用してラスターとしてロードします。このデータ製品の詳細は、hereを参照してください。次に、ラスターをポイントに変換して、ggplotと再生します。

system('wget https://www.dropbox.com/s/7jsdqgc9wjcdznv/NADP_wet_deposition_nh4_0.5x0.5_grid_annual_R1.txt') 
layer<- raster("path/to/raster/NADP_wet_deposition_nh4_0.5x0.5_grid_annual_R1.txt") #you need to specify your own path here, wherever the downloaded file is saved. 
raster.points <- rasterToPoints(layer) 
raster.points <- data.frame(raster.points) 
colnames(raster.points) <-c('x','y','layer') 

ggplot2を使用してマップを作成し、ラスタを重ねます。

mp <- NULL 
#grab US map and choose colors 
map.US <- borders("usa", colour='white',fill='black', lwd=0.4) 
mp <- ggplot(data=raster.points, aes(y=y, x=x)) 
mp <- mp + map.US 
mp <- mp + geom_raster(aes(fill=layer)) 
mp <- mp + theme(axis.text.y=element_blank(), 
       axis.text.x=element_blank(), 
       axis.title.y=element_blank(), 
       axis.title.x=element_blank(), 
       axis.ticks=element_blank(), 
       panel.background = element_rect(fill='black'), 
       plot.background = element_rect(fill='black'), 
       panel.grid.major=element_blank(), 
       panel.grid.minor=element_blank()) 
mp 

出力は次のようになります。

enter image description here

あなたが見ることができるように、物事ほとんどラインアップではなく、かなり。すべてがわずかに右にシフトされます。これを引き起こしている可能性がありますし、どうすれば修正できますか?

+1

私は 'library(maps);を実行すると、基本グラフィックスに同じオフセットが表示されます。 map( 'usa'); plot(レイヤー、add = TRUE) ' – eipi10

+3

境界にグリッドの左下隅が並んでいるように見えます。境界線のアウトラインのxとyの位置を中間点で整列させたい場合は、x位置をxグリッド間隔の半分だけ上に移動し、yグリッド間隔の半分だけシフトします。 –

+1

ORGLのウェブサイトのメタデータには、-124.0から-66.5度の範囲と25.0から49.0の範囲の空間範囲が示されていますが、ggplot2ラスタのデフォルトは、その中点まで応答のために –

答えて

3

ORNLの文書に続いて、Ndepプロットの境界線は実際にグリッドの左下隅に並んでいます。中間点(デフォルトではggplot)で並んだxとyの位置を取得するには、xの位置を1グリッド間隔ずらす必要があります。この場合格子間隔は0.5度なので、x座標ベクトルから半分を引いた。

この問題の解決策は、コメントで42で示唆されました。だから、

、以前のように、データをダウンロードしてください。

system('wget https://www.dropbox.com/s/7jsdqgc9wjcdznv/NADP_wet_deposition_nh4_0.5x0.5_grid_annual_R1.txt') 
layer<- raster("path/to/raster/NADP_wet_deposition_nh4_0.5x0.5_grid_annual_R1.txt") #you need to specify your own path here, wherever the downloaded file is saved. 
raster.points <- rasterToPoints(layer) 
raster.points <- data.frame(raster.points) 
colnames(raster.points) <-c('x','y','layer') 

そして決定的に、座標のxベクトルから半分程度をsubstract。今

raster.points$x <- raster.points$x - 0.5 

、先に行くとプロット:すべて並ん

mp <- NULL 
#grab US map and choose colors 
map.US <- borders("usa", colour='white',fill='black', lwd=0.4) 
mp <- ggplot(data=raster.points, aes(y=y, x=x)) 
mp <- mp + map.US 
mp <- mp + geom_raster(aes(fill=layer)) 
mp <- mp + theme(axis.text.y=element_blank(), 
       axis.text.x=element_blank(), 
       axis.title.y=element_blank(), 
       axis.title.x=element_blank(), 
       axis.ticks=element_blank(), 
       panel.background = element_rect(fill='black'), 
       plot.background = element_rect(fill='black'), 
       panel.grid.major=element_blank(), 
       panel.grid.minor=element_blank()) 
mp 

enter image description here

2

ORNLは、42とコリンの説明に基づいて、不適切なファイルを提供します。そして、あなたはおそらくそれらについて話すべきです。それは明らかであるべきである場合

xllcorner -124 
yllcorner 25 

:ファイルが有する

xllcorner -124.5 
yllcorner 25 

もしそうであれば、そのファイルが現在xがセルエッジとして座標、及びyはセル中心として座標を指定することを意味します。それはどの標準でも良くない。 xとyの両方にセルの中心ではなくセルの端を表す形式はありますが、2つのうちの1つではありません。いずれにせよ、使用されるファイル形式(arc-ascii)ではこれは許されません。 RasterLayerが作成された後

この誤差を補正するための良い方法は、shiftを使用することです:

layer < raster("NADP_wet_deposition_nh4_0.5x0.5_grid_annual_R1.txt") 
layer <- shift(layer, -0.5, 0) 

、次に進みます。これは、ggplotting以外の目的でラスタデータを正しく使用できるため、より汎用的なソリューションです。

+0

ありがとう!ちょうど私は完全に理解しています - ラスターをポイントに変換するときの投影と元のラスターの両方がシフトされていますか? x/y GPS座標を使用して特定のサイトのラスタからデータを抽出するので、私は尋ねます。最初にこの修正を行わずにこのデータ抽出をオフにすることはできますか? – colin

+1

元のラスタが移動します。あなたがそれを修正した後、ポイントは上手くいくはずです。抽出はOKでなければなりません(実際にはシフトがないと間違っています)。 – RobertH

+0

これは箱から出てこないようです。 'Error in shift(ndep.ORNL、-0.5、0): xはリスト、data.frameまたはdata.table'でなければなりません – colin