【问题标题】:Problem with plotting an axis that consists of the number of observations by another column绘制由另一列的观察数组成的轴的问题
【发布时间】:2021-06-03 20:44:34
【问题描述】:

我有一个数据集,它显示了人类染色体及其长度(此处称为“值”)及其各自的基因。此外,基因分为4组(gtype),即RNA、prot-coding、pseudogene和rest。我想在 y 轴和 x 轴上绘制单个染色体我想用 geom_point,bar 获得染色体的密度(这将是“每个染色体的基因数”除以染色体的长度)或 col,然后根据基因的 gtype 制作 facet_wrap。所以 4 个图,其中一个图只计算 RNA 基因除以值,一个图只计算 prot 编码基因除以值。

该图只是将所有基因的总数除以单个值(但是正常情况下 chrM 最大)

但是我在 x 轴上经常失败,我不知道如何得到一个有意义的情节。到目前为止,我尝试过的是 sum()、count()、nrow() 和 group_by() 的混合。通常 x 轴只是总行数除以“值”,否则结果没有意义。

【问题讨论】:

  • 欢迎来到 SO!为了帮助我们为您提供帮助,您能否通过共享您的数据、您尝试的代码和您的的示例来重现您的问题用过的?见how to make a minimal reproducible example。请不要发布代码/数据/错误的图像:如果您想将您的数据类型 dput(NAME_OF_DATASET) 发布到控制台中,并将以 structure(.... 开头的输出复制并粘贴到您的帖子中,或者例如dput(head(NAME_OF_DATASET, 20)) 前 20 次观察。

标签: r ggplot2


【解决方案1】:

如果我理解您的操作正确,您的数据看起来有点像这样:

set.seed(3425)
levs <- paste0("chr", c(1:10, "M"))
join_chr <- tibble(
    seqnames = sample(factor(levs, levels = levs), size = 1000, replace = TRUE), 
    gtype = sample(c("pseudogene", "RNA", "prot_coding", "rest"), size = 1000, replace = TRUE), 
    value = round(runif(n = 1000, min = 2e4, max = 2e8)))
join_chr
# # A tibble: 1,000 x 3
#   seqnames gtype           value
#   <fct>    <chr>           <dbl>
# 1 chr1     pseudogene   16170520
# 2 chr8     pseudogene  193230157
# 3 chr9     RNA           6846001
# 4 chr8     prot_coding  64930082
# 5 chr8     pseudogene   11873972
# 6 chr1     pseudogene  136993074
# 7 chr9     rest         53026355
# 8 chr6     prot_coding  36841130
# 9 chr5     prot_coding 157630684
# 10 chr10    prot_coding  29793808
# # … with 990 more rows

您可以使用summarise 来计算密度。将此作为单独的步骤执行,您可以检查摘要以确保其行为符合您的预期。

dens_chr <- join_chr %>% 
    group_by(seqnames, gtype) %>% 
    summarise(density = n() / max(value), .groups = "drop")

dens_chr
# # A tibble: 44 x 3
#    seqnames gtype            density
#    <fct>    <chr>              <dbl>
# 1  chr1     prot_coding 0.0000000872
# 2  chr1     pseudogene  0.000000154 
# 3  chr1     rest        0.000000162 
# 4  chr1     RNA         0.000000119 
# 5  chr2     prot_coding 0.000000110 
# 6  chr2     pseudogene  0.0000000833
# 7  chr2     rest        0.0000000893
# 8  chr2     RNA         0.000000143 
# 9  chr3     prot_coding 0.000000145 
# 10 chr3     pseudogene  0.000000126 
# # … with 34 more rows

然后你可以绘制这个。

ggplot(data = dens_chr, 
    mapping = aes(x = density, y = seqnames)) + 
    geom_bar(stat = "summary", fun = max) + 
    facet_grid(. ~ gtype) + 
    theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1))

【讨论】:

    猜你喜欢
    • 2020-02-27
    • 2018-06-20
    • 1970-01-01
    • 2012-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多