8

島を含む gglot2 で完全なマップを表示する方法を見つけようとしています。r_base と tmap の両方で島を表示できましたが、ggplot2 では島と残りの水域を区別できませんでした... ここに画像の説明を入力.

私の質問は、島をggplot2に表示させる方法ですか?

以下で使用したコードを参照してください。

library(ggplot2)
library (rgdal)
library (rgeos)
library(maptools)
library(tmap)

iho と呼ばれるペルシャ湾の形状塗りつぶしのロード

PG <- readShapePoly("iho.shp")

形状ファイルはこちらから入手できます

http://geo.vliz.be:80/geoserver/wfs?request=getfeature&service=wfs&version=1.0.0&typename=MarineRegions:iho&outputformat=SHAPE-ZIP&filter=%3CPropertyIsEqualTo%3E%3CPropertyName%3Eid%3C%2FPropertyName%3E%3CLiteral %3E41%3C%2FLiteral%3E%3C%2FPropertyIsEqualTo%3E

r_base でプロット

Q<-plot(PG)

図Aに対応

tmap によるプロット

qtm(PG)

図Bに対応

データフレームに変換

AG <- fortify(PG)

ggplot2 でプロットする

ggplot()+ geom_polygon(data=AG, aes(long, lat, group = group), colour = alpha("darkred", 1/2), size = 0.7, fill = 'skyblue', alpha = .3)

図Cに対応

4

2 に答える 2

9

穴を別の色で塗りつぶすように ggplot に指示する必要があります。例:

ggplot()+ geom_polygon(data=AG, aes(long, lat, group = group, fill = hole), colour = alpha("darkred", 1/2), size = 0.7) + scale_fill_manual(values = c("skyblue", "white")) + theme(legend.position="none")

また、形状ファイルを読み取るときにすべての投影情報とデータム情報を保持するreadOGR()代わりに、rgdal パッケージの関数を試してください。readShapePoly()

于 2016-02-01T19:12:20.837 に答える
8

@AdamMccurdyの回答に加えて、島と隣接する背景に同じ色を付ける可能性がいくつかあります。

1 つ目は、島の塗りつぶしの色と背景の色を同じに設定します。しかし、グリッド ラインはポリゴンの下にあるため、消えてしまいます。

2 つ目は、グリッド線を元に戻そうとする試みです。パネルの上に背景 (グリッド線を含む) を ( を使用してpanel.ontop = TRUE) プロットします。しかし、同じ背景と島の色を得るためにアルファ値を調整するのは少し手間がかかります。

3 番目は、背景と島の色を (1 番目と同様に) 同じに設定し、パネルの上にグリッド線をプロットします。これを行うにはいくつかの方法があります。ここでは、元のプロットからグリッド線を取得して、パネルの上に描画します。したがって、色は同じままで、アルファ透明度は必要ありません。

library(ggplot2)
library (rgdal)
library (rgeos)
library(maptools)

PG <- readOGR("iho.shp", layer = "iho")    
AG <- fortify(PG)

方法 1

bg = "grey92"
ggplot() + 
   geom_polygon(data = AG, aes(long, lat, group = group, fill = hole), 
      colour = alpha("darkred", 1/2), size = 0.7) + 
   scale_fill_manual(values = c("skyblue", bg)) + 
   theme(panel.background = element_rect(fill = bg),
         legend.position = "none")

ここに画像の説明を入力

方法 2

ggplot() + 
   geom_polygon(data = AG, aes(long, lat, group = group, fill = hole), 
      colour = alpha("darkred", 1/2), size = 0.7) + 
   scale_fill_manual(values = c("skyblue", "grey97")) + 
   theme(panel.background = element_rect(fill = alpha("grey85", .5)),
         panel.ontop = TRUE, 
         legend.position = "none")

ここに画像の説明を入力

方法 3

ggplot バージョン 3.0.0 へのマイナー編集更新

library(grid)
bg <- "grey92"
p <- ggplot() + 
   geom_polygon(data = AG, aes(long, lat, group = group, fill = hole), 
      colour = alpha("darkred", 1/2), size = 0.7) + 
   scale_fill_manual(values = c("skyblue", bg)) + 
   theme(panel.background = element_rect(fill = bg),
         legend.position = "none")

# Get the ggplot grob
g <- ggplotGrob(p)

# Get the Grid lines
grill <- g[7,5]$grobs[[1]]$children[[1]]

# grill includes the grey background. Remove it.
grill$children[[1]] <- nullGrob()  

# Draw the plot, and move to the panel viewport
p
downViewport("panel.7-5-7-5")

# Draw the edited grill on top of the panel
grid.draw(grill)
upViewport(0)

しかし、このバージョンは ggplot への変更に対してもう少し堅牢かもしれません

library(grid)
bg <- "grey92"
p <- ggplot() + 
   geom_polygon(data = AG, aes(long, lat, group = group, fill = hole), 
      colour = alpha("darkred", 1/2), size = 0.7) + 
   scale_fill_manual(values = c("skyblue", bg)) + 
   theme(panel.background = element_rect(fill = bg),
         legend.position = "none")

# Get the ggplot grob
g <- ggplotGrob(p)

# Get the Grid lines
grill <- getGrob(grid.force(g), gPath("grill"), grep = TRUE)

# grill includes the grey background. Remove it.
grill = removeGrob(grill, gPath("background"), grep = TRUE)

# Get the name of the viewport containing the panel grob.
# The names of the viewports are the same as the names of the grobs.
# It is easier to select panel's name from the grobs' names
names = grid.ls(grid.force(g))$name
match = grep("panel.\\d", names, value = TRUE)

# Draw the plot, and move to the panel viewport
grid.newpage(); grid.draw(g)
downViewport(match)

# Draw the edited grill on top of the panel
grid.draw(grill)
upViewport(0)

ここに画像の説明を入力

于 2016-07-06T04:25:07.977 に答える