Сеточный график недостающих данных - PullRequest
0 голосов
/ 20 декабря 2018

Мои данные выглядят так:

Col1 Var1 Var2
A     1    NA
B     NA    1
C     1    NA
D     1    1

Я хочу создать график с отсутствующими данными так же, как это можно сделать с помощью пакета Amelia (https://www.r -bloggers.com / ggplot-your-missing-data-2 / )

Однако я нахожу результат довольно уродливым.По сути, я хочу, чтобы переменные в столбце 1 находились на оси x, а Var1 и Va2 - на оси Y.Как серый, когда присутствует, и черный, когда отсутствует.Это имеет смысл?

Любой совет?Я поместил участок Амелии ниже enter image description here

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Базовый раствор R

Dat = t(matrix(as.numeric(is.na(df[,2:3])), nrow=nrow(df)))
rownames(Dat) = names(df)[2:3]
colnames(Dat) = df$Col1

heatmap(Dat, NA, NA, scale="none", col=c("gray", "black"))

Heatmap

Данные

df = read.table(text="Col1 Var1 Var2
A     1    NA
B     NA    1
C     1    NA
D     1    1", 
header=TRUE)
0 голосов
/ 20 декабря 2018

Вот вариант ggplot2.

Сначала измените ваши данные с широкого на длинный и замените ǸA на 0 s (или любое другое значение).

df1_long <- tidyr::gather(replace(df1, is.na(df1), 0), key, value, -Col1)

Сейчас сюжет

library(ggplot)
ggplot(df1_long, aes(Col1, key, fill = factor(value))) +
  geom_tile() + 
  scale_x_discrete(expand = c(0, 0)) +
  scale_y_discrete(expand = c(0, 0)) +
  scale_fill_manual(values = c(`0` = "black",
                               `1` = "grey80"),
                    labels = c("Missing", "Observed")) +
  labs(title = "Your Title",
       fill = NULL,
       x = NULL,
       y = NULL) +
  coord_equal() +
  theme(legend.position = "bottom")

enter image description here

данные

df1 <- structure(list(Col1 = c("A", "B", "C", "D"), Var1 = c(1L, NA, 
1L, 1L), Var2 = c(NA, 1L, NA, 1L)), .Names = c("Col1", "Var1", 
"Var2"), class = "data.frame", row.names = c(NA, -4L))
...