R IN ACTION SELF-TUTORIAL-55 地图上绘制柱状图 2020-12-27

image.png

地图上绘制柱状图:

  • 先制定mapbar函数:

# the mapbars  function 
mapbars <- function (x, xllc = 0, yllc = 0, barwidth=1, maxheight=10){
    # calculate how long each bar needs to be
    bars <- (x/max(x)) * maxheight
    # get some quick colors
    col <- rainbow(length(x))
    
    for(i in 1:length(x)){
        # figure out x- and y coordinates for the corners
        leftx   <- xllc + ((i-1) * barwidth)
        rightx  <- leftx + barwidth
        bottomy <- yllc
        topy    <- yllc + bars[i]
        # draw the bar
        polygon(x=c(leftx, rightx, rightx, leftx, leftx),
                y=c(bottomy, bottomy, topy, topy, bottomy),
                col=col[i])
    }
}
  • x is for the values to be represented by the bars

  • xllc and yllc specify the position of the lower left corner of the left bar in whatever coordinate system you are using

  • barwidth and maxheight are used for scaling the size of the bars

  • Here's a demo with a basic sp-based plot. I don't think I've worked with plotrix before, but based on how floating.pie works, I'd assume that this should also work with plotrix.

  • 绘制地图并在其上绘制bar:

library(sp)
library(maptools) # just for easy access to a background map
# load some country borders as a background
data("wrld_simpl")
plot(wrld_simpl)

# zoom on a bit …
mexico <- subset(wrld_simpl, NAME=="Mexico")
plot(mexico, axes=TRUE)

# data for the bars
x1 <- c(4, 7, 1, 2) 

# plot
plot(mexico, axes=TRUE)
mapbars(x=x1, xllc=-110, yllc=20, barwidth=.5, maxheight=5)
legend(x="topright", pch=22, col="black", pt.bg=rainbow(x1), legend=c("foo", "bar", "baz", "foobar"))

# add another one:
x2 <- c(9, 21, 64, 45, 33, 43, 12, 7)
mapbars(x=x2, xllc=-100, yllc=25, barwidth=.2, maxheight=2)

得到:


image.png
  • 或者:

library(sp)
library(maptools) # just for easy access to a background map
# load some country borders as a background
data("wrld_simpl")
plot(wrld_simpl)

# zoom on a bit …
mexico <- subset(wrld_simpl, NAME=="Turkey")
plot(mexico, axes=TRUE)

# data for the bars
x1 <- c(4, 7, 1, 2)

# plot
plot(mexico, axes=TRUE)
mapbars(x=x1, xllc=-10, yllc=20, barwidth=.5, maxheight=5)
legend(x="topright", pch=22, col="black", pt.bg=rainbow(x1), legend=c("foo", "bar", "baz", "foobar"))

# add another one:
x2 <- c(9, 21)
mapbars(x=x2, xllc=-100, yllc=45, barwidth=.2, maxheight=2)
image.png
  • Reference:

https://gis.stackexchange.com/questions/219880/plotting-bar-charts-on-maps-in-r

你可能感兴趣的:(R IN ACTION SELF-TUTORIAL-55 地图上绘制柱状图 2020-12-27)