2015-11-04 6 views
8

ggplot2にGoogleマップのベースマップをオーバーレイするラスタをマップにプロットします。したがって、私はこのようなget_map()insert_raster()を使用:ggmapベースマップにラスタを追加:ggplot2のinset_raster()にアルファ(透明)と塗りつぶしの色を設定します。

library(ggplot2) 
library(ggmap) 

bm <- ggmap(get_map(location = "Bangkok", maptype = "hybrid")) 

bm + inset_raster(as.raster(r), xmin = [email protected][1], xmax = [email protected][2], 
        ymin = [email protected][3], ymax = [email protected][4]) 

alphaを設定し、fill色を変更するには、いずれかの可能性はありますか?

結果は次のようになります。 enter image description here

答えて

8

:ところで周りのこの作品は、もともとこのリンクで育った

は、私たちことがわかっthis blog entryからの更なる情報について

下の元の記事を読みます直接に空間ポリゴンを使用できますggplot::geom_polygon()

あなただけ後述するように、何か

を視覚化する必要がある場合はSPEEDをプロット取り組む方法

、そのようなプロットは、ピクセルの数が多い非常に遅くなることがあります。したがって、ポリゴンに変換する前に、ピクセル数(ほとんどの場合、マップ内の情報量を減らすことはできません)を減らすことを検討してください。したがって、raster::aggregateを使用して、ピクセル数を合理的な量に減らすことができます。

この例では、ピクセル数が4(2 * 2、水平方向*垂直)の順にどのように減少するかを示しています。詳細は?raster::aggregateを参照してください。

r <- aggregate(r, fact = 2) 
# afterwards continue with rasterToPolygons(r)... 

オリジナルポスト:

しばらくして、私はこの問題を解決する方法を発見しました。 ラスタをポリゴンに変換する!この考えは基本的にMarc Needham's blog postの後に実装されました。

しかし、1つの欠点があります:ggplotは、必然的に直面する多数のポリゴンでは非常に遅くなります。ただし、png()(またはその他の)デバイスにプロットすることで、スピードアップできます。ここで


は、コード例です:

library(raster) 
library(ggplot2) 
library(ggmap) 

r <- raster(....) # any raster you want to plot 
rtp <- rasterToPolygons(r) 
[email protected]$id <- 1:nrow([email protected]) # add id column for join 

rtpFort <- fortify(rtp, data = [email protected]) 
rtpFortMer <- merge(rtpFort, [email protected], by.x = 'id', by.y = 'id') # join data 

bm <- ggmap(get_map(location = "Shanghai", maptype = "hybrid", zoom = 10)) 

bm + geom_polygon(data = rtpFortMer, 
        aes(x = long, y = lat, group = group, fill = layer), 
        alpha = 0.5, 
        size = 0) + ## size = 0 to remove the polygon outlines 
    scale_fill_gradientn(colours = topo.colors(255)) 

これは、このようなものになり:

Raster with an alpha on a ggmap base map

1

はちょうどこのに自分自身を探していました。

library(ggplot2) 
library(ggmap) 

bm <- ggmap(get_map(location = "Bangkok", maptype = "hybrid")) 

bm <- bm + geom_raster(...) # insert your raster here 

bm <- bm + coord_cartesian() 

plot(bm) 

私は:

Error: geom_raster only works with Cartesian coordinates.

この問題の回避策は、次のように()coord_cartesian使用することです:私は、ラスタとggmap出力をオーバーレイしようとしていた遭遇問題は、次のエラーでしたあなたのラスターrがどこから来ているのか分からない。これを行うには、ラスタrをデータフレームに変換し、geom_raster()命令に従ってデータを追加するだけで、座標が緯度/経度(つまりマップと同じ)であることを確認してください。

質問に答えるには、geom_raster()を使用してアルファと塗りつぶしを操作できます。

これが役に立ちます。 fortifyなしでさらに高速 https://groups.google.com/forum/embed/#!topic/ggplot2/nqzBX22MeAQ

+0

この回答をいただき、ありがとうございます。ただし、デカルト座標を使用すると、アスペクト比は維持されません。したがって、地理的アプリケーションにはあまり適していません – loki

+0

次のように追加してください:bm < - bm + coord_fixed(xlim = c(a、b)、ylim = c(c、d)、ratio = 1.3)、a、b 、c、dは、選択したビューパネルの範囲です。ここでの重要なのは、配給量を1.3に設定することです。 – pdbentley

+0

代わりに、bm < - bm + coord_fixed(1.3)を追加するだけです。 – pdbentley

関連する問題