r - 将 NA 值添加到 ggplot 图例以获得连续数据图

标签 r ggplot2 legend na

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

谢谢您的帮助!!

最佳答案

您可以利用 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



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

关于r - 将 NA 值添加到 ggplot 图例以获得连续数据图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29151167/

相关文章:

r - 使用 lpSolve 时的简并性

r - 如何在 r 中使用 tensoflow CNN 为 keras 准备 data.frame

r - 在条形图中保留未使用的级别

excel - VBA 图例和绘图区域调整大小

r - 用于公式中的 eval 解析的包装函数

mysql - 无法使用 Rstudio 在控制台中正确编码中文

r - 通过 k 均值聚类对 ggplot 的绘图矩阵进行着色?

r - 二维图中一维的ggplot2密度

r - 为每个条形图 r 添加一个标签

python - Matplotlib 1.3.0,图例行和文本不匹配