叶绿体上的二级图例,用于点和多边形,ggplot

时间:2018-07-16 20:17:17

标签: r ggplot2 legend

我有一张包含多边形和点的地图-显示了世界上感兴趣的国家。

我想要两个项目(点和多边形)的图例,但无法添加它们。首先绘制多边形(并带有图例),而点不出现在图例上。为了解决这个问题,我添加了

  

show.legend = T

但是,图例随后将点添加到多边形颜色的顶部,如下所示:

enter image description here

我想要的是另一个带有黄色圆点的图例项目,在这里我可以根据需要设置标签。

此刻,我正在使用单独的文件生成点层。也许我需要从一个包含点和多边形的df中完成所有操作-从单个es生成点和多边形。但是鉴于我的积分没有团体号,我无法考虑如何做到这一点。

这是我目前的代码:

world <- map_data("world")
countries <- read_excel("country_table.xlsx", sheet = 3) #table of coutries with interest

world3 <- merge(world, countries, all.x = TRUE) %>%
  arrange(order)

world4 <- world3 %>%
  filter(!is.na(interest))

city <- read_excel("country_table.xlsx", sheet = 4) #point data
city$long <- as.numeric(city$long)
city$lat <- as.numeric(city$lat)

ggplot() + 
  geom_polygon(data = world3, aes(x = long, y = lat, group = group),
               fill = "light grey") +
  geom_polygon(data = world4, aes(x = long, y = lat, group = group, fill = interest),
               col = "white") +
  scale_fill_manual(name = "Interest/Support:",
                    breaks = c("interest", "past", "current"),
                    values = c(interest = "#a7ef88", past = "#3a7f1d", current = "#1b5104"), 
                    labels = c("interest", "past", "current")) +
  theme_map() +
  theme(legend.position = "bottom") +
  coord_fixed(xlim = c(-130, 160),
              ylim = c(-50, 75), 
              ratio = 1.4) +
  geom_point(data = city, aes(x= long, y = lat),
             shape = 21, inherit.aes = F, size = 2, col = "black", fill = "yellow", show.legend = T)

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

下面发布的ggplot部分的最终代码。感谢aosmith。

ggplot() + 
  #create base plot all polygons in grey
  geom_polygon(data = world3, aes(x = long, y = lat, group = group),
               fill = "light grey") +
  #create chloropleth layer for countries with data
  geom_polygon(data = world4, aes(x = long, y = lat, group = group, fill = interest),
               col = "white") +
  #add map theme from ggthemes
  theme_map() +
  #Set the zoom
  coord_fixed(xlim = c(-130, 160),
              ylim = c(-50, 75), ratio = 1.4) +
  #Add city layer - include col in aes() to get city as a separate legend item
  geom_point(data = city, aes(x= long, y = lat, col = interest),
             shape = 21, inherit.aes = F, size = 3, fill = "yellow") +
  #set fill for countries by interest (include city (special) to have the correct number of aesthetics)
  scale_fill_manual(name = NULL,
                    breaks = c("interest", "past", "current", "special"),
                    values = c(interest = "#a7ef88", past = "#3a7f1d", current = "#1b5104", special = "yellow"), 
                    labels = c("interest", "past", "current", "city")) +
  #set color for cities and labels for cities legend
  scale_color_manual(name = NULL, 
                     breaks = c("special"),
                     values = c(special = "black"),
                     labels = c("cities")) +
  #set order of legend items (fill first)
  guides(fill = guide_legend(order = 1),  color = guide_legend(order = 2)) +
  #set legend position and vertical arrangement
  theme(legend.text = element_text(size = 9), legend.position = "bottom", legend.box = "vertical")

给出以下内容:

enter image description here