R ggplot Facet Wrap

时间:2015-07-20 00:29:12

标签: r ggplot2

我想通过y轴将这个散点图包裹起来。例如,如果y轴上升到1000,我想把这个图分成4,第一个是y轴来自的0-250,下一个251-500,下一个501-750,最后一个751-1000。这种刻面包装是否可行?

library(ggplot2)

A
nrow(A)
# 1000
ncol(A)
# 3
head(A)
#   Track Base Location
# 1     1    A        1
# 2     1    C        2
# 3     1    G        3
# 4     1    G        4
# 5     1    A        5
# 6     1    A        6

p <- ggplot(data = A, aes(y=Track, x=Location)) + 
  geom_point(aes(colour=Base),shape=15,size=2)
  print(p)

这就是我现在所拥有的,正如你所看到的,它看起来并不美观。 This is what I have right now, as you can see, it doesn't look aesthetically pleasing.

1 个答案:

答案 0 :(得分:2)

您可以 - 您只需制作一个指示变量,该变量显示每个点应属于哪个方面。

(撇开 - 您在问题中所提出的内容仍然不是一个可重复的例子 - 我们所追求的是我们可以复制粘贴到我们的终端中的东西,这仍然可以证明您的问题。例如,在我的回答中我我向您展示了一个可重复的示例,其中我在A中只有100行而不是1000行,并且我的间隔与您的不同,但关键是您可以将其直接复制粘贴到终端,您可以轻松地看到它将如何扩展对你的问题)。

e.g。

# here's a reproducible example, with 100 data points
A <- data.frame(Track=1, Location=1:100, Base=factor(sample(c('A', 'T', 'C', 'G'), 100, replace=T)))

library(ggplot2)

ggplot(transform(A, panel=cut(Location, seq(0, 100, by=25), include.lowest=T)),
       aes(x=Track, y=Location)) + 
  geom_point(aes(colour=Base),shape=15,size=2) +
  facet_wrap( ~ panel, scales='free')

关键点:

  • transform(A, panel=...)在您的数据框中添加了一个额外的列“面板”(尝试自行运行以查看)
  • cut(Location, seq(0, 100, by=25), include.lowest=T)会生成一个因子,指示每个Location所在的时间间隔。此处的时间间隔为[0, 25], (25,50] (50,75] (75,100]include.lowest确保第一个中包含0间隔)。对于你在问题中提到的休息,你会做seq(0, 1000, by=250)
  • 之类的事情
  • facet_wrap(~ panel,...)每个时间间隔生成一个方面
  • scales='free'中的facet_wrap使得每个面板中的所有y刻度可能不同(跳过它们并且它们都以共同的比例绘制 - 只是试图跳过它你会看到我的意思。)

enter image description here