我第一次尝试用ggplot
绘制地图,但在实现自己的想法时遇到了问题。
首先,我有一个数据框,其中每个国家/地区代码都与一个数字相关联。例如:
id count
US 2030
DE 1001
UA 730
SY 229
我想获得一张ggplot
地图,其中按数字范围对国家/地区进行着色(例如:超过2000个深红色,1000-2000红色,1000-600橙色,600-200黄色,小于100白色)。颜色本身并不重要,我只想让颜色越低就越浅。
这是我尝试过的:
world_map <- map_data(map = "world")
world_map$region <- iso.alpha(world_map$region)
ggplot(df, aes(map_id = id)) +
geom_map(aes(fill = frequency), map = world_map) +
expand_limits(x = world_map$long, y = world_map$lat) +
scale_colour_manual(name = "counts", values = cols,
breaks = c(2000,1000,600,200),
labels=c("more than 2000","2000-1000","1000-600","600-200")) +
theme_void() +
coord_fixed()
当我尝试执行此代码时,我收到以下错误消息
不知道如何为类型的对象自动选择比例 功能。默认为连续。错误:美学必须有效 数据列。有问题的美学:填充=频率。你是否 输入错误的数据列名称或忘记添加after_stat()?
现在,我了解到如何设置参数存在问题,但是我无法在Internet上找到任何解决方案(或者也许我是一个初学者,无法正确理解它)。
答案 0 :(得分:2)
对于任何混乱,我深表歉意。我认为这就是您要寻找的。 p>
首先,将使用cut
将count
列分组,并带有所需的标签。这将创建一个count_group
因子。
如果您想对图例中的标签重新排序,则可以使用fct_rev
中的forcats
重新排序此因子。
然后,将其用于fill
中的geom_map
,您可以使用scale_fill_manual
定义颜色。在这种情况下,您可能需要Reds
调色板。
要添加国家/地区的边界,请使用geom_polygon
和NA
进行填充。
library(maps)
library(RColorBrewer)
library(forcats)
df <- data.frame(
id = c("US", "DE", "UA", "SY"),
count = c(2030, 1001, 730, 229)
)
df$count_group <- cut(df$count,
breaks = c(-Inf, 200, 600, 1000, 2000, Inf),
labels = c("Less than 200", "600-200", "1000-600", "2000-1000", "More than 2000"))
world_map <- map_data(map = "world")
world_map$region <- iso.alpha(world_map$region)
ggplot(df) +
geom_map(aes(map_id = id, fill = fct_rev(count_group)), map = world_map) +
geom_polygon(data = world_map, aes(x = long, y = lat, group = group), colour = 'black', fill = NA) +
expand_limits(x = world_map$long, y = world_map$lat) +
scale_fill_manual(name = "Counts", values = rev(brewer.pal(5, name = "Reds"))) +
theme_void() +
coord_fixed()
图解