【问题标题】:R ggplot Facet WrapR ggplot Facet Wrap
【发布时间】:2015-07-20 00:29:12
【问题描述】:

我很想用 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)

这就是我现在所拥有的,如您所见,它看起来并不美观。

【问题讨论】:

  • 请提供一个可重现的示例 - 我们无法重新创建您的代码,因为我们没有 A

标签: r ggplot2


【解决方案1】:

你可以 - 你只需要创建一个指示变量来显示每个点应该属于哪个方面。

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

例如

# 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,...) 使每个间隔一个方面
  • facet_wrap 中的 scales='free' 使得每个面板中的所有 y 比例都可能不同(跳过它,它们都被绘制在一个共同的比例上 - 试着跳过它,你会看到我的意思)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-04
    • 1970-01-01
    • 2020-06-09
    • 2021-02-22
    • 2018-09-24
    • 1970-01-01
    相关资源
    最近更新 更多