我有这个庞大的数据框(1558个2431个变量),其中包含NA
&{39}和1
'
我需要绘制一个图像,其中每个空白(NA
)字段都填充黄色,每个1
字段都填充绿色,但我找到的每个示例都有一个更简单的数据框或他们没有二进制观察,因此我无法使他们的代码适应我的问题。
我需要绘制类似this的内容。我提取了一部分数据框,并在Microsoft Excel中创建了一些条件后获取了此截图。
提前致谢。
答案 0 :(得分:2)
这是一个开始:
library(tidyverse)
# Fake data
set.seed(2)
dat = as.data.frame(replicate(30, sample(c(1,2,NA),50,replace=TRUE)))
dat$row = 1:nrow(dat)
# Convert data to long format
dat = gather(dat, col, value, -row) %>%
mutate(col = factor(col, levels=names(dat)))
ggplot(dat, aes(col, row, fill=factor(value))) +
geom_tile(colour="grey50") +
scale_fill_manual(values=c("1"="green", "2"="white"), na.value="yellow") +
scale_y_reverse(breaks=1:50, expand=c(0,0)) +
scale_x_discrete(position="top") +
labs(fill="Value") +
theme_classic()
答案 1 :(得分:0)
这是使用image
的替代方案。此方法有一些注意事项:它会将您的NA
值转换为-1
以进行绘图,并且必须使用矩阵。因此,您的里程可能会根据您的需要而有所不同,但这是一种快速的方式来可视化您是否已经完成了所有这些。
mat <- matrix(sample(c(1, NA), 100, replace = TRUE), nrow = 10, ncol = 10,
dimnames = list(1:10, 1:10))
mat[is.na(mat)] <- -1
par(mar = c(9,5,5,5), xpd = TRUE)
xn <- as.numeric(colnames(mat))
yn <- as.numeric(rownames(mat))
image(xn, yn, mat, breaks = c(-1, 0, 1), col = c("yellow", "green"))
legend(3.5, -0.7, c("NA", "1"), fill = c("yellow", "green"), ncol = 2)