我通过稍微调整Amelia包中missmap函数中的一些代码来创建丢失数据的可视化。我想在矩形周围绘制边框,但是我找不到在ggplot2中做到这一点的方法。
我找到了函数“ borders()”,但这似乎与地图工作有关。我也尝试使用geom_rect,但似乎需要我指定最小值和最大值。 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)
答案 0 :(得分:1)
正如@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)
由reprex package(v0.3.0)于2019-05-30创建
如果在左上角有凹口(已讨论here,并且在上图中很明显),则可能需要更新为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)
由reprex package(v0.3.0)于2019-05-30创建
如果在数据框中添加第三个变量(即列),则会得到以下内容: