【问题标题】:Adding State abbreviations to map generated using ggplot2将州缩写添加到使用 ggplot2 生成的地图中
【发布时间】:2013-10-18 23:53:27
【问题描述】:

我正在尝试将州缩写添加到使用 ggplot2 生成的美国地图中,但遇到了一些困难。我相信“fill =”选项会导致它,但我不确定。

下面我提供了我正在使用的代码。最初,我按照我想要的方式生成地图,除了州名。接下来,我尝试在同一张地图上叠加州级缩写。

不幸的是,它不适合我。如果我从第一张地图中注释掉“fill =”选项,我可以生成带有州缩写的地图。但是那张地图没有显示我打算显示的内容。我尝试了几种方法。我暂时只在代码中留下一个选项。

为了添加州缩写,我遵循我在这个论坛上阅读的一些建议。特别是,我正在尝试遵循 2012 年 2 月 25 日题为“ggplot centered names on a map”的讨论中的建议。

如果我能在第一张地图上添加/覆盖州缩写,我将不胜感激。

# Master US location data
states <- map_data("state")

# Read in the data
rate <- read.csv("~/R/HealthCare/Data/Test_data.csv")

names(rate) <- tolower(names(rate))
rate$numer <- as.factor(rate$numer)
rate$region <- tolower(rate$statename)


# Create data for US mapping
tomap <- merge(states, rate, sort = FALSE, by = "region")
tomap <- tomap[order(tomap$order), ]


  ## US Map

 # 1. Target Map (w/o state abbr)
p <- qplot(long, lat, data = tomap, 
            group = group, 
            fill = numer,
            geom = "polygon")

p + scale_fill_brewer(palette = "Greens",
                    guide = guide_legend(reverse = TRUE),
                    labels = c("1st cat", "2nd cat", 
                               "3rd cat", "4th cat")) 



  # 2. Add State Abbreviations to Target Map
stannote <- aggregate(cbind(long, lat, group, numer) ~ stateabbr, data = tomap, 
                      FUN=function(x)mean(range(x)))


q <-  qplot(long, lat, data = tomap, 
            group = group,
            #fill = numer,
            fill = "red", #testing
            geom = "polygon") +
  geom_text(data=stannote, aes(long, lat, label = stateabbr), color = "blue", size=3) +
  coord_map()

q

示例数据文件如下所示 -

StateName,StateAbbr,Numer
Alabama,AL,0
Alaska,AK,0
Arizona,AZ,0
Arkansas,AR,0
California,CA,0
Colorado,CO,0
Connecticut,CT,0
Delaware,DE,0
District of Columbia,DC,1
Florida,FL,0
Georgia,GA,0
Hawaii,HI,0
Idaho,ID,1
Illinois,IL,0
Indiana,IN,0
Iowa,IA,1
Kansas,KS,0
Kentucky,KY,1
Louisiana,LA,1
Maine,ME,2
Maryland,MD,0
Massachusetts,MA,2
Michigan,MI,0
Minnesota,MN,1
Mississippi,MS,0
Missouri,MO,0
Montana,MT,0
Nebraska,NE,0
Nevada,NV,1
New Hampshire,NH,1
New Jersey,NJ,2
New Mexico,NM,1
New York,NY,3
North Carolina,NC,0
North Dakota,ND,1
Ohio,OH,0
Oklahoma,OK,0
Oregon,OR,2
Pennsylvania,PA,0
Rhode Island,RI,0
South Carolina,SC,0
South Dakota,SD,1
Tennessee,TN,0
Texas,TX,0
Utah,UT,1
Vermont,VT,2
Virginia,VA,0
Washington,WA,2
West Virginia,WV,0
Wisconsin,WI,0
Wyoming,WY,0

【问题讨论】:

  • 您是否收到错误消息?这是StateAbbrstateabbr(大小写)的区别引起的问题吗?
  • @Hugh 在我读入 CSV 文件后,我立即将所有变量名(包括 StateAbbr)转换为小写,并在整个过程中使用小写变量名。我面临的问题是,当我尝试将状态缩写添加到原始图表时,我得到“错误:提供给离散比例的连续值”。原始“fill=”语句中使用的变量是“numer”,它是一个离散变量(原始图表适用于该变量)。我不太明白错误信息。这就是我尝试其他“fill=”的原因,它出现在上面的代码中。

标签: r ggplot2


【解决方案1】:

正如我在使用 R 时经常遇到的情况一样,错误消息实际上是在告诉您正在发生的事情(只需要一段时间才能弄清楚)。第二个数据集stannote 中的numer 变量是连续的(使用str(stannote) 检查结构以查看此内容)。因此,您可以将该变量更改为一个因子。但请注意:当您总体使用cbind 时,我认为您强制将因子转换为数字变量,因此stannote 中的numer 从1-4 而不是0-3。

选项 1:

stannote$numer = factor(stannote$numer, labels = c(0, 1, 2, 3))
qplot(long, lat, data = tomap, 
            group = group,
            fill = numer, #testing
            geom = "polygon") +
  geom_text(data=stannote, aes(long, lat, label = stateabbr),
                    color = "blue", size=3) + scale_fill_brewer(palette = "Greens")

或者,您可以使用fill = NULL 从对geom_text 的调用中删除您为整体情节设置的fill 美学。您实际上不需要填充文本,只需要填充多边形。在这种情况下,如果您使用ggplot 而不是qplot,您可能只需为geom_polygon 设置填充美学。

选项 2:

stannote$numer = as.numeric(stannote$numer)
qplot(long, lat, data = tomap, 
            group = group,
            fill = numer, #testing
            geom = "polygon") +
  geom_text(data=stannote, aes(long, lat, label = stateabbr, fill = NULL),
                    color = "blue", size=3) + scale_fill_brewer(palette = "Greens")

【讨论】:

  • 非常感谢。您是绝对正确的,解决方案隐藏在错误消息中。现在效果很好。
猜你喜欢
  • 2012-12-03
  • 1970-01-01
  • 2020-07-17
  • 2021-11-14
  • 1970-01-01
  • 2019-12-19
  • 2013-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多