将NA值添加到ggplot图例以获取连续数据图

时间:2015-03-19 17:26:23

标签: r ggplot2 legend na

我正在使用ggplot将数据值映射到(强化的)SpatialPolygonsDataFrame,但是许多多边形都有NA值,因为没有可用的数据。

我使用na.value =“white”来正确显示缺失的数据,但我想在图例中添加带有白色填充的框(或单独的图例),标签为“无数据”。< / p>

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 (%)")

(我有一个很好的图像来说明这一点,但没有足够的声誉点来发布它)

我已阅读this,但我的数据是连续的(不是离散的)和this,但我无法弄清楚如何将'line'更改调整为'fill'。

感谢您的帮助!!

3 个答案:

答案 0 :(得分:0)

您可以使用

将您的NAs替换为0
data[is.na(data)] <- 0

这样你的nas将被零替换,你的传奇将显示“0s”

为了向我们展示您可以拥有博客的图片,可以在此处粘贴链接

答案 1 :(得分:0)

尝试一下:

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

答案 2 :(得分:0)

内部 aes()
指定某些美学时,您可以利用ggplot的行为创建图例 我正在创建一些虚拟数据,并使用geom_map而不是geom_polygon,我发现它更容易。然后,您可以使用override.aes用NA值指定图例键的填充。然后,您可以轻松地重命名图例等。

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

reprex package(v0.3.0)于2019-07-18创建