0

で提案されているように、次のコードを使用してマップ上に棒グラフをプロットしています: Bars to be plotted over map

    ddf = read.table(header=T, sep=",", text="
    country, val1, val2, val3
    Nigeria,5,10,8
    China,25,12,20
    Brazil,50,9,20
    Italy,75,25,5
    Australia,100,5,25
    ")

ddf = structure(list(country = structure(c(5L, 3L, 2L, 4L, 1L), .Label = c("Australia", 
"Brazil", "China", "Italy", "Nigeria"), class = "factor"), val1 = c(5L, 
25L, 50L, 75L, 100L), val2 = c(10L, 12L, 9L, 25L, 5L), val3 = c(8L, 
20L, 20L, 5L, 25L)), .Names = c("country", "val1", "val2", "val3"
), class = "data.frame", row.names = c(NA, -5L))

    require (rworldmap)

    sPDF <- joinCountryData2Map(ddf
        , joinCode = "NAME"
        , nameJoinColumn = "country"
        , verbose = TRUE)

    plot(getMap())

    require(TeachingDemos)
    df <- cbind(ddf, sPDF@data[sPDF@data$ADMIN %in% ddf$country, c("LON", "LAT")])
    for (i in 1:nrow(df)) 
      subplot(barplot(height=unlist(df[i, 2:4], use.names=F), 
                      axes=F, 
                      col=rainbow(3), ylim=range(df[,2:4])),
              x=df[i, 'LON'], y=df[i, 'LAT'], size=c(.3, .3))

バーは非常にうまくプロットされていますが、サイズが対応していません。プロットは次のようになります (最初のバーの最高値はオーストラリアではなくナイジェリアの上にあり、ブラジルの最初のバーは中国よりも大きいことに注意してください)。

ここに画像の説明を入力

4

1 に答える 1

1

その背後にある理由は、あなたがブラインド cbindを行っていることでした...そして返されたデータsPDF@data[sPDF@data$ADMIN %in% ddf$country, c("LON", "LAT")]は、ddf にあるものと同じ seq にありません..これを試してください

df <- merge(x = ddf, y = sPDF@data[sPDF@data$ADMIN %in% ddf$country, c('ADMIN',"LON", "LAT")],
            by.x= 'country', by.y = 'ADMIN')
for (i in 1:nrow(df)) 
  subplot(barplot(height=unlist(df[i, 2:4], use.names=F), 
                  axes=F, 
                  col=rainbow(3), ylim=range(df[,2:4])),
          x=df[i, 'LON'], y=df[i, 'LAT'], size=c(.3, .3))

この後の結果は

ここに画像の説明を入力

上記のグラフでは、すべての棒グラフの範囲は同じです。つまり、コード スニペットで言及したのは 5 ~ 100 です。

于 2014-06-17T08:33:06.390 に答える