我想通过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)
这就是我现在所拥有的,正如你所看到的,它看起来并不美观。
答案 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刻度可能不同(跳过它们并且它们都以共同的比例绘制 - 只是试图跳过它你会看到我的意思。)