我正在通过稍微调整 Amelia 包中的 mismap 函数中的一些代码来创建缺失数据的可视化。我想在我的矩形周围绘制边框,但我无法在 ggplot2 中找到一种方法来做到这一点。
我找到了函数“borders()”,但这似乎与地图工作有关。我也尝试使用 geom_rect,但这似乎需要我指定 mins 和 maxes。Geom_raster 似乎正是我所需要的,但我不知道如何指定边界。
此示例代码创建了我想象的可视化效果,但我在“真实”版本中有更多变量,我希望能够用线条(边框)勾勒出每个变量(var1、var2 等)。
#Dataset
missmap_data_test <- data.frame(var1 = c(11, 26, NA, NA, 15),
var2 = c(NA, NA, 0, NA, 1))
#Create Function
ggplot_missing <-
function(x){
x %>%
is.na %>%
melt %>%
ggplot(data = .,
aes(x = Var2,
y = Var1)) +
geom_raster(aes(fill = value)) +
scale_fill_grey(name = "",
labels = c("Present","Missing")) +
theme_minimal() +
theme(axis.text.x = element_text(angle=90, hjust=1)) +
labs(x = "Variables in Dataset",
y = "Observations")
}
#Feed the function my new data
ggplot_missing(missmap_data_test)
Run Code Online (Sandbox Code Playgroud)
正如@Axeman 所建议的那样,geom_tile完成这项工作。我已经更新了您的代码以在下面给出示例。在这里,colour定义边框的颜色,同时size定义粗细。
#Dataset
missmap_data_test <- data.frame(var1 = c(11, 26, NA, NA, 15),
var2 = c(NA, NA, 0, NA, 1))
# Load libraries
library(dplyr)
library(ggplot2)
library(reshape2)
#Create Function
ggplot_missing <- function(x){
x %>%
is.na %>%
melt %>%
ggplot(data = .,
aes(x = Var2,
y = Var1)) +
geom_tile(aes(fill = value), colour = "#FF3300", size = 2) +
scale_fill_grey(name = "",
labels = c("Present","Missing")) +
theme_minimal() +
theme(axis.text.x = element_text(angle=90, hjust=1)) +
labs(x = "Variables in Dataset",
y = "Observations")
}
#Feed the function my new data
ggplot_missing(missmap_data_test)
Run Code Online (Sandbox Code Playgroud)

由reprex 包(v0.3.0)于 2019 年 5 月 30 日创建
如果您在左上角出现缺口(在此处讨论并在上图中很明显),您可能需要更新到ggplot2. 也就是说,devtools::install_github("tidyverse/ggplot2")。例如,将上图与下图进行比较:

我认为这是一个玩具示例,所以我试图提出一个通用的解决方案。在这里,我创建了一个名为的函数boxy,该函数将geom_rect根据原始数据框创建一个数据框。
#Dataset
missmap_data_test <- data.frame(var1 = c(11, 26, NA, NA, 15),
var2 = c(NA, NA, 0, NA, 1))
# Function for making box data frame
boxy <- function(df){
data.frame(xmin = seq(0.5, ncol(df) - 0.5),
xmax = seq(1.5, ncol(df) + 0.5),
ymin = 0.5, ymax = nrow(df) + 0.5)
}
# Load libraries
library(dplyr)
library(ggplot2)
library(reshape2)
#Create Function
ggplot_missing <- function(x){
df_box <- boxy(x)
df_rast <- x %>% is.na %>% melt
ggplot() +
geom_raster(data = df_rast,
aes(x = Var2,
y = Var1,
fill = value)) +
geom_rect(data = df_box,
aes(xmin = xmin, xmax = xmax,
ymin = ymin, ymax = ymax),
colour = "#FF3300", fill = NA, size = 3) +
scale_fill_grey(name = "",
labels = c("Present","Missing")) +
theme_minimal() +
theme(axis.text.x = element_text(angle = 90, hjust = 1)) +
labs(x = "Variables in Dataset",
y = "Observations")
}
#Feed the function my new data
ggplot_missing(missmap_data_test)
Run Code Online (Sandbox Code Playgroud)

由reprex 包(v0.3.0)于 2019 年 5 月 30 日创建
如果向数据框中添加第三个变量(即列),则会得到如下结果:
