3

herehereから同じ問題について質問しましたが、まだ問題を解決できません。問題を細かく分解するのではなく、問題全体を持ってきて助けを求める必要があると思います。

csv にエクスポートしたデータフレームがあり、http://pastebin.com/SNT9Ykt7にあります。

chart <- ggplot(data=map.shp,aes(x=long,y=lat))

### PART1 START ###
chart <- chart + geom_polygon(data=map.shp,aes(x=long,y=lat,group=id),colour=rgb(162,159,140,maxColorValue=255),fill=rgb(233,235,232,maxColorValue=255),size=0.1)
### PART1 END ###

### PART2 START ###    
map.group <- unique(map.shp[,"group"])
for (loop in (1:length(map.group))) {
  temp.shp <- map.shp[map.shp[,"group"]==map.group[loop],]
  temp.colour <- "red"
  if (unique(temp.shp[,"hole"])=="TRUE") {
    temp.colour <- "blue"
  }
  chart <- chart + geom_polygon(data=temp.shp,aes(x=long,y=lat,group=id,order=group),colour=rgb(162,159,140,maxColorValue=255),fill=temp.colour,size=0.1)
}
### PART2 END ###

chart <- chart + opts(panel.background=theme_rect(colour=rgb(190,225,247,maxColorValue=255),fill=rgb(190,225,247,maxColorValue=255)),                      
                      panel.grid.major=theme_blank(),
                      panel.grid.minor=theme_blank(),
                      panel.border=theme_blank(),
                      plot.background = theme_blank(),
                      axis.line=theme_blank(),
                      axis.text.x=theme_blank(),
                      axis.title.x=theme_blank(),
                      axis.text.y=theme_blank(),
                      axis.title.y=theme_blank(),
                      axis.ticks=theme_blank())
chart <- chart + coord_cartesian(xlim = range(map.shp[,"long"]), ylim = range(map.shp[,"lat"]))

PART1 スクリプトでは、次の出力が得られます。

ここに画像の説明を入力

PART2 スクリプトでは、次の出力が得られます。

ここに画像の説明を入力

実はこれは穴の開いたピースランドで、このレイヤーの下に何か別のものを表示するので、穴を「穴」として表示する必要があるため、PART2 スクリプトを使用した表示はできません。しかし、PART2 スクリプトはマップを正しくプロットしています (赤は土地、青は穴)。

修正する必要がある PART1 出力からのいくつかの問題:

  • 穴として表示されない穴の一部
  • ポリゴンの外側の線が間違ってプロットされています

PART1で何を間違えたのかわかりません。誰でも助けることができますか?

更新 01

txt ファイルは、次のコードを使用して作成されます。

map.shp.raw <- readShapeSpatial("shp_files/map.shp")
map.shp <- fortify(map.shp.raw)

添付された txt ファイルは、txt として保存し、read.table コマンドを使用して data.frame としてインポートできます。

4

1 に答える 1

10

言った@spacedmanにうなずきます:

穴を描くために何年も前に思いついた解決策は、各穴の後にx、y座標が同じ場所に戻ることを確認することです。これにより、線があちこちに鳴り響き、他のポリゴンと交差し、ワインディング ナンバー アルゴリズムが塗りつぶさない (または塗りつぶすべきではない場合に塗りつぶす) 空き領域を残すことがなくなります。

( https://stackoverflow.com/a/12051278/602276 )

では、彼のアドバイスに従いましょう。

library(plyr2)
map.shp2 <- ddply(map.shp, .(piece), function(x)rbind(x, map.shp[1, ]))
ggplot(data=map.shp2) + geom_polygon(aes(x=long,y=lat))

ここに画像の説明を入力

于 2012-08-21T09:32:56.870 に答える