ggplot2:按分类变量分割散点图

时间:2017-05-12 11:46:02

标签: r ggplot2

我正在尝试生成散点图,其中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)

enter image description here

红色和黑色点应沿x轴分开。

2 个答案:

答案 0 :(得分:4)

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

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")

enter image description here

答案 1 :(得分:3)

如果您真的想在单个图中而不是构面中执行此操作,则可以有条件地重新缩放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)))

结果: enter image description here