【问题标题】:Add NA value to ggplot legend for continuous data map将 NA 值添加到 ggplot 图例以获取连续数据图
【发布时间】:2015-05-22 22:56:00
【问题描述】:

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

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

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,但我不知道如何将“线”更改为“填充”。

感谢您的帮助!

【问题讨论】:

  • 发现 github.com/hadley/ggplot2/issues/410 似乎我们陷入了变通办法......
  • 如果您根据您的问题制作一个可重复的最小示例,我们更有可能为您提供帮助。我们可以使用的东西向您展示如何解决您的问题。您可以查看this SO post,了解如何在 R 中制作一个出色的可重现示例。

标签: r ggplot2 legend na


【解决方案1】:

您可以利用 ggplot 的行为,它在指定某些美学时创建图例 aes()
我正在创建一些虚拟数据并使用 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 年 7 月 18 日创建

【讨论】:

  • 我喜欢您的回复,但在更改国家/地区的轮廓颜色时无法复制它,将colour="darkgrey" 添加到geom_map()。您的示例 geom_map(data = india.df, map = india.df, aes(x = long, y = lat, fill = Area_pct, map_id = region, color = 'NA')) 有效,但 geom_map(data = india.df, map = india.df, colour="darkgrey", aes(x = long, y = lat, fill = Area_pct, map_id = region, color = 'NA')) 无效。如何结合这两个选项?
  • @MrGISRocker 可能值得一个后续问题。也请不要忘记链接到这个问题。干杯。
【解决方案2】:

您可以使用 0 替换您的 NA

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

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

为了向我们展示图片,您可以拥有一个博客并将链接粘贴到此处

【讨论】:

  • 这不涉及 OP 描述的情况,其中“没有数据”与“在地图上为该区域收集数据但有 0 个案例”不同 - 应该ggplot2 有一个选项来显示 NA、选择如何标记它们、为它们着色并将它们包含在图例中,这不是功能要求吗?
【解决方案3】:

试试这个:

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

【讨论】:

    猜你喜欢
    • 2017-07-10
    • 2018-03-21
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    相关资源
    最近更新 更多