在R中的地图上绘制条形图?


14

我使用的是plotrixR绘制美国的一个州级地图。它具有出色的功能,floating.pie可以将饼图放在每个状态上。

我想知道plotrix软件包中是否有类似功能可以在每种状态下显示条形图?(我看了一下文档,处理条形图的功能似乎没有这种可能性,但是我只是想确定一下。)如果可能,我更喜欢在plotrix包中工作,但可以随意命名其他套餐。

举例来说,我将有兴趣制作与此类似的地图(但针对美国):

在此处输入图片说明

对于我的美国地图,将有50个条形图,每个州一个。

我从/programming/20465070/barplots-on-a-map上获得了这张地图,但是ggsubplot似乎不适用于我的R版本(类似于其他人在帖子中所说的内容) )。


2
我也知道如何使用ggsubplotpackage进行操作,但是现在不建议使用它,并且它不起作用(如您所述)。也许这篇文章可以作为起点:stackoverflow.com/questions/36063043/…–
安德烈·席尔瓦

请查阅有关plotrix的文档,以查看是否存在此类功能。然后咨询plotrix的创建者。
Mox

Answers:


1

我知道我真的很晚了,但是我认为我找到了一个相当简单的解决方案。

如果您看一下的源代码floating.pie()(例如通过调用getAnywhere(floating.pie)),您会注意到它使用了一种非常简单而有效的方法:将饼图段绘制为多边形。如果条形图中只需要条形图(没有标签,轴等),则可以采用相同的方法编写自己的函数。这是一个快速而肮脏的版本:

# the 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 是用条形表示的值
  • xllcyllc在使用的任何坐标系中指定左栏的左下角的位置
  • barwidthmaxheight用于缩放条的大小

这是一个带有基本sp情节的演示。我认为我以前没有合作 plotrix过,但是根据floating.pie工作原理,我认为这也应该适用plotrix

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)

结果看起来像这样: 以上代码生成的示例地图


运行mapbars行> mapbars(x = x1,xllc = -110,yllc = 40,barwidth = .5,maxheight = 5)时出现此错误,mapbars(x = x1,xllc = -110,yllc = 40,条宽= 0.5,最大高度= 5):找不到函数“ mapbars”
324

听起来您没有在我的答案的第一部分中运行代码。该函数mapbars在第一个大的代码块中定义,即mapbars <- function (x, xllc = 0, ...。您必须首先执行整个代码部分,才能“教导” R新命令。
我的毛巾在哪里

-1

ggplot2ggvis是两个库,可以帮助您在地图上显示图。在ggplot2中,您可以在地图上绘制气泡,然后只需要给aes()坐标,该坐标与气泡的大小和颜色无关。关于条形图,您需要至少分配两对x和y,一对用于条形图的位置,另一对用于条形图的高度和宽度。换句话说,您需要知道条形图的4个角的坐标。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.