【问题标题】:ggplot2: split scatter plot by categorical variableggplot2:按分类变量拆分散点图
【发布时间】:2017-05-12 11:46:02
【问题描述】:

我正在尝试生成一个散点图,其中 x 轴是连续变量的几个类别。最接近它的是曼哈顿图,其中 x 轴按染色体(分类)分割,但在每个类别中,值是连续的。

数据:

chr <- sample(x = c(1,2), replace = T, size = 1000)
bp  <- as.integer(runif(n = 1000, min = 0, max = 10000))
p   <- runif(n = 1000, min = 0, max = 1)
df <- data.frame(chr,bp,p)

起点:

ggplot(df, aes(y = -log10(p), x =bp)) + geom_point(colour=chr)

红点和黑点应该是沿 x 轴的不同类别。

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    我不确定我是否理解了你的问题。可能您正在寻找方面。请参阅示例。

    require(ggplot2)
    
    chr <- sample(x = c(1,2), replace = T, size = 1000)
    bp  <- as.integer(runif(n = 1000, min = 0, max = 10000))
    p   <- runif(n = 1000, min = 0, max = 1)
    df <- data.frame(chr,bp,p)
    
    ggplot(df, aes(y = -log10(p), x = bp)) +
      geom_point(aes(colour = factor(chr))) +
      facet_wrap("chr")
    

    【讨论】:

    • 谢谢。这是正确的想法,但我宁愿没有单独的情节——如果可能的话,不要分面。
    【解决方案2】:

    如果您真的想在单个绘图而不是构面中执行此操作,您可以有条件地重新调整您的 x 变量,然后手动调整标签,例如:

    df %>%
        mutate(bp.scaled = ifelse(chr == 2, bp + 10000, bp)) %>%
        ggplot(aes(y = -log10(p), x = bp.scaled)) + geom_point(colour=chr) +
        scale_x_continuous(breaks = seq(0,20000,2500),
                           labels = c(seq(0,10000,2500), seq(2500,10000,2500)))
    

    结果:

    【讨论】:

    • 谢谢,太好了!正确我不想使用构面。我很惊讶没有简单的分组命令可以做到这一点。
    • 我认为facet 就是那个命令。这只是一个关于如何并列结果图的审美选择。
    • 然后我会尝试一些方面的参数。感谢您的信息
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-29
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多