Подтвердить что ты не робот

В ggplot2, как добавить дополнительную легенду?

Я пытаюсь создать карту в ggplot2, используя данные из отдельных кадров данных.

library(maptools)

xx <- readShapePoly(system.file("shapes/sids.shp", package="maptools")[1], IDvar="FIPSNO", proj4string=CRS("+proj=longlat +ellps=clrk66"))

xx.sub1 <- subset(xx, xx$FIPSNO < 37010)
xx.sub2 <- subset(xx, xx$FIPSNO > 37010)

[email protected]$id <- rownames([email protected])
xx.sub1.points <- fortify(xx.sub1, region="id")
xx.sub1.df = join(xx.sub1.points, [email protected], by="id")

[email protected]$id <- rownames([email protected])
xx.sub2.points <- fortify(xx.sub2, region="id")
xx.sub2.df = join(xx.sub2.points, [email protected], by="id")

ggplot(xx.sub2.df) + 
  aes(long, lat, fill = (SID79/BIR79)*1000, group = group) + 
  geom_polygon() + geom_path(color="grey80") +
  coord_equal() + 
  scale_fill_gradientn(colours = brewer.pal(7, "YlOrBr")) +
  geom_polygon(data = xx.sub1.df, fill = "grey50") + 
  geom_path(data = xx.sub1.df, color="grey80") +
  labs(fill = "Mapped value", title = "Title")

До этого момента все работает так, как ожидалось, и я получаю хорошую карту:

enter image description here

Однако я хотел бы добавить отдельную легенду для данных из xx.sub1.df - поскольку все полигоны заполнены серым цветом, я надеюсь, что это будет одна дополнительная запись.

Как я могу это достичь?

4b9b3361

Ответ 1

Я не уверен на 100%, это то, что вы хотите, но вот как я подхожу к проблеме, насколько я ее понимаю. Если мы сопоставим некоторые неиспользованные geom с любыми данными из xx.sub1.df, но сделаем их невидимыми на графике, мы все равно можем получить легенду для этого geom. Здесь я использовал geom_point, но вы могли бы сделать его другим.

p <- ggplot(xx.sub2.df) + 
  aes(long, lat, fill = (SID79/BIR79)*1000, group = group) + 
  geom_polygon() + geom_path(color="grey80") +
  coord_equal() + 
  scale_fill_gradientn(colours = brewer.pal(7, "YlOrBr")) +
  geom_polygon(data = xx.sub1.df, fill = "grey50") + 
  geom_path(data = xx.sub1.df, color="grey80") +
  labs(fill = "Mapped value", title = "Title")

#Now we add geom_point() setting shape as NA, but the colour as "grey50", so the 
#legend will be displaying the right colour

p2 <- p + geom_point(data = xx.sub1.df, aes(size="xx.sub1", shape = NA), colour = "grey50")

enter image description here

Теперь нам просто нужно изменить размер и форму точки в легенде и изменить название легенды (спасибо @DizisElferts, который продемонстрировал это ранее).

p2 + guides(size=guide_legend("Source", override.aes=list(shape=15, size = 10)))

enter image description here

Конечно, вы можете изменить способ работы ярлыков или что угодно, чтобы выделить то, что вы хотите показать.

Если это не то, что вам нужно, дайте мне знать!