如何通过位置箱绘制所有出现的NA
Posted
技术标签:
【中文标题】如何通过位置箱绘制所有出现的NA【英文标题】:How to graph all the occurences of NA by bins of positions 【发布时间】:2022-01-21 08:22:07 【问题描述】:我对 R 有点陌生,我希望将所有出现的NA
绘制成直方图的位置变化。我开始使用ggplot
,但我不知道从哪里开始?
df <- data.frame(position=c(3, 5, 6, 7, 16, 17, 19, 20, 21, 35, 46, 78, 98, 100,
145, 146, 147),
petal15=c(0, 1, 1, 1, 0, NA, 1, NA, NA, NA, 1, 0, 0, 1, NA,
0, NA),
petal20=c(1, 0, 0, 1, 1, 1, 1, 1, NA, NA, 1, 1, NA, NA, 0,
0, 0))
【问题讨论】:
您能否详细说明“在位置变化时出现 NA”? @jay.sf 对不起,我忘了添加位置数据,我想要做的是每当petal15或petal20出现NA时,我想将其绘制为具有bin大小的直方图(稍后确定)。忽略 1 和 o 【参考方案1】:如果我理解正确,您正在寻找这个。
hist(rowSums(is.na(df)), xlab='occurrences', col=4, main="NA's")
编辑
为了在评论中实现您的想法,我们首先需要一份职位列表。
(pos <- lapply((0:14)*10 + 1, \(x) (0:9) + x))
# [[1]]
# [1] 1 2 3 4 5 6 7 8 9 10
#
# [[2]]
# [1] 11 12 13 14 15 16 17 18 19 20
#
# [...]
#
# [[15]]
# [1] 141 142 143 144 145 146 147 148 149 150
使用sapply
,我们创建所需的矩阵并将其通过管道传递给barplot()
。
sapply(pos, \(i) colSums(is.na(df[df$position %in% i, -1]))) |>
barplot(beside=TRUE, xlim=c(1, 48), ylim=c(0, 2.5), col=3:4,
xlab='Occurences', ylab='Freq', main="NA's",
legend.text=names(df[-1]), args.legend=list(x='topright'),
names.arg=Reduce(\(x, y) paste0(x, '-', y),
as.data.frame(t(sapply(pos, range)))),
cex.names=.8)
box()
注意:
R.version.string
# [1] "R version 4.1.2 (2021-11-01)"
数据:
df <- structure(list(position = c(3, 5, 6, 7, 16, 17, 19, 20, 21, 35,
46, 78, 98, 100, 145, 146, 147), petal15 = c(0, 1, 1, 1, 0, NA,
1, NA, NA, NA, 1, 0, 0, 1, NA, 0, NA), petal20 = c(1, 0, 0, 1,
1, 1, 1, 1, NA, NA, 1, 1, NA, NA, 0, 0, 0)), class = "data.frame", row.names = c(NA,
-17L))
【讨论】:
有点,我试图根据位置绘制它......所以在 0-10 之间有 0 次出现 NA 的花瓣 15 或花瓣 20,但位置 11-20 将出现 2 次 NA花瓣 15 但花瓣 20 为 0,因此花瓣 15 的条形为 freq=2,而花瓣 20 的条形为 freq=0。重复直到位置 141 到 150。 @James 哇,这有点复杂。请参阅编辑。 天哪,谢谢你,我知道这很复杂,谢谢你帮助我! 不客气@James【参考方案2】:一个 tidyverse 解决方案 - 旋转更长的时间,然后过滤所有 NA,然后按照上面的建议绘制直方图,但使用 ggplot 代替。
library(tidyverse)
df_na <-
df %>%
pivot_longer(-position) %>%
filter(is.na(value))
ggplot(df_na, aes(position, fill = name)) +
geom_histogram(binwidth = 5, position = position_dodge()) +
scale_x_continuous(breaks = seq(0,150,10))
由reprex package (v2.0.1) 于 2021 年 12 月 19 日创建
【讨论】:
以上是关于如何通过位置箱绘制所有出现的NA的主要内容,如果未能解决你的问题,请参考以下文章
R语言使用ggplot2包geom_jitter()函数绘制分组(strip plot,一维散点图)带状图(双分类变量分组:色彩配置添加箱图位置参数调整)实战