Add NA value to ggplot legend for continuous data map

陌路散爱 提交于 2019-12-09 15:34:49

问题


I'm using ggplot to map data values to a (fortified) SpatialPolygonsDataFrame, but many of the polygons have NA values because there is no data available.

I used na.value = "white" to display the missing data correctly, but I'd like to add a box with a white fill in the legend (or a separate legend) with the label "no data".

library(ggplot2)

india.df <- read.csv('india.df.csv') 
# (I don't know how to provide this file to make the code reproducible)

ggplot() +
geom_polygon(data=india.df, aes(x = long, y = lat, group = group, fill=Area_pct)) +
scale_fill_gradient(low="orange2", high="darkblue", na.value = "white") +
geom_path(data=india.df, aes_string(x = x, y = y, group = group), color = "gray", size = 0.25) +
theme_bw() +
coord_map() +
labs(title = "Rice Under Irrigation in Gujarat - 2001", 
     fill = "Area (%)")

(I have a great image to illustrate this but don't have enough reputation points to post it)

I've read this, but my data is continuous (not discrete), and this, but I can't figure out how to adapt the 'line' change to 'fill'.

Thanks for the help!!


回答1:


you can replace your NAs with 0 using

data[is.na(data)] <- 0

that way your nas will be replaced by zero and yout legend will show "0s"

And to show us the image you can have a blog and can paste the link here




回答2:


Try this:

ggplot(all your info) + geom_point(na.rm = TRUE) + geom_line(na.rm = TRUE)



回答3:


You could make use of the behavior of ggplot which creates a legend when specifying certain aesthetics within aes()
I am creating some dummy data and am using geom_map instead of geom_polygon, which I find easier. You can then use override.aes to specify the fill of the legend key with the NA value. You can then easily rename the legend etc.

library(tidyverse)

worldData <- map_data('world') %>% fortify()
india.df <- data.frame(region = 'India', Area_pct = 2, stringsAsFactors = FALSE) %>% right_join(worldData, by = 'region')

na.value.forplot <- 'white'

ggplot() +
  geom_map(data = india.df, map = india.df, aes(x = long, y = lat, fill = Area_pct, map_id = region, color = 'NA')) +
  scale_fill_gradient(low="orange2", high="darkblue", na.value = na.value.forplot) +
  scale_color_manual(values = 'black', labels = 'Missing value') +
  guides(color = guide_legend(override.aes = list(fill = na.value.forplot)))
#> Warning: Ignoring unknown aesthetics: x, y

Created on 2019-07-18 by the reprex package (v0.3.0)



来源:https://stackoverflow.com/questions/29151167/add-na-value-to-ggplot-legend-for-continuous-data-map

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!