ggplot美国州地图;颜色不错,但多边形边缘不平滑 - r

7
我正在尝试绘制一个美国地图,其中每个州都会根据其数量而着色。我已经成功地完成了着色。然而,我遇到的问题是多边形看起来非常锯齿状(我认为当我尝试将map_data(“state”)与我的每个州计数的数据框合并时发生了某些问题)。在合并之前,我的数据框有49行(我的数据集中缺少内华达州的数据),合并后有更多的行(长/宽项预期为各州),但每个纬度/经度对的数据似乎被正确复制,所以我不确定为什么多边形如此锯齿状。
代码:
ggplot() +
  geom_polygon(data=try1, aes(x=long, y=lat, group = group, fill= COUNT)) +
  scale_fill_continuous(low='thistle2', high='darkred', guide='colorbar') +
  theme_bw() + labs(fill="State Map Try Title1", title='Title2', x='', y='') +
  scale_y_continuous(breaks=c()) +
  scale_x_continuous(breaks=c()) +
  theme(panel.border = element_blank())

任何帮助都将不胜感激(如果有更好的方法,我非常乐意听取建议!)。 在此输入图片描述

1
我显然不知道如何嵌入图片。 >.> - Keyboard Frenzy
1
你能提供一下吗:你使用的shapefile;你的计数数据;以及你用来连接的代码,这样我们就可以查看哪个阶段出了问题?谢谢。 - Phil
嗨Phil, 我做了以下操作:states_map <- map_data('state') #这包含州形状的经纬度 merge(states_map, data, by='region')我现在无法访问数据(在另一台计算机上),但我会尝试发布我正在使用的合并前数据表。谢谢! - Keyboard Frenzy
你的数据排序不正确。如果你使用 plyr::join 或者 dplyr::left_join 而不是 merge,那么应该没问题了。或者,你可以在开始时给你的地理数据添加行号,并在最后按照它们进行排序。同时,检查一下 coord_map 是否有一个合适的投影方式。 - Gregor Thomas
plyr::join 运行得非常完美。只需将 merge(*args and stuff) 更改为 join(*args and stuff),不仅连接速度更快,而且图形看起来无瑕疵。谢谢! - Keyboard Frenzy
2个回答

14

您不需要进行合并。您可以使用geom_map,并将数据与形状分开。以下是使用内置的USArrests数据(使用dplyr重新格式化)的示例:

library(ggplot2)
library(dplyr)

us <- map_data("state")

arr <- USArrests %>% 
  add_rownames("region") %>% 
  mutate(region=tolower(region))

gg <- ggplot()
gg <- gg + geom_map(data=us, map=us,
                    aes(x=long, y=lat, map_id=region),
                    fill="#ffffff", color="#ffffff", size=0.15)
gg <- gg + geom_map(data=arr, map=us,
                    aes(fill=Murder, map_id=region),
                    color="#ffffff", size=0.15)
gg <- gg + scale_fill_continuous(low='thistle2', high='darkred', 
                                 guide='colorbar')
gg <- gg + labs(x=NULL, y=NULL)
gg <- gg + coord_map("albers", lat0 = 39, lat1 = 45) 
gg <- gg + theme(panel.border = element_blank())
gg <- gg + theme(panel.background = element_blank())
gg <- gg + theme(axis.ticks = element_blank())
gg <- gg + theme(axis.text = element_blank())
gg

在此输入图片描述


嘿,谢谢!这也可以。我特别欣赏coord_map,因为它让地图更漂亮一些。 - Keyboard Frenzy
我无法运行它。首先,%>% 不是默认可用的,并且很难在谷歌上搜索(它来自于 magrittr)。其次,我无法让 dplyr 在3.1.1上安装。您能否将列洗牌编辑得更简洁? - Superbest
代码在普通的R会话中运行得很完美,%>%dplyr 一起使用。这意味着你没有按原样运行它。此外,我相信您完全有能力将代码放入自己的编辑器中,并更改行间距/缩进以适应个人喜好,@Superbest。 - hrbrmstr
嗯,这对我没用,我使用的是Rstudio。列重排是指数据框的列,而不是源。无论如何,抱歉试图帮助改进答案。 - Superbest
你没有按照代码编写的方式来执行它。句号。我也使用RStudio。 - hrbrmstr
显示剩余2条评论

0

我在使用ggplot2时遇到了类似的问题。与@hrbrmstr的解决方案不同,我发现重新加载ggplot2包(以及rgdal/maptools)可以解决我的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接