R|ggplot2:无序堆叠条形图

R|ggplot2: unordered stacked bar graph

我有一个如下所示的数据集:

samp.data <- structure(list(Track = c(1,1,1,1,1,1,1,1,2,2,2), 
    Base = c("A","C","B","A","D","D","C","A","A","B","B"), 
    Length = c(1,1,1,1,2,3,1,1,1,1,1)), 
    .Names = c("Track", "Base", "Length"), class = "data.frame",row.names = c(NA, 11L))

#    Track Base Length
# 1      1    A      1
# 2      1    C      1
# 3      1    B      1
# 4      1    A      1
# 5      1    D      2
# 6      1    D      3
# 7      1    C      1
# 8      1    A      1
# 9      2    A      1
# 10     2    B      1
# 11     2    B      1

我正在尝试绘制一个无序堆积条,x 轴为轨道,y 轴为长度。换句话说,条形图不会将 A 碱基组合在一起并将其绘制为 1+1+1+1=4 的一个长度。它会按顺序绘制每个基地。首先,它会在轨道 1 中绘制长度为 1 的 A 碱基,长度为 1 的 C 碱基,长度为 1 的 B 碱基,长度为 1 的 A 碱基,长度为 2 的 D 碱基,等等。

下面是我要描述的内容的粗略 ASCII 图:

  |       C
L |       Y
e |       Y          Key
n |       R          A = Red
g | B     B          B = Blue
t | B     G          C = Green
h | R     R          D = Yellow
  ----------
    2     1
     Track

抱歉,如果解释有点混乱。感谢您的帮助!

编辑:这个问题与可能重复的问题不同,因为我想取消对堆叠部分的分组。

只需使用 geom_bar(stat='identity'),将您的 x 设置为 Track,将您的 y 设置为 length - 一切正常。

注意 - 我将你的 Base 转换为因子(有意义),以及你的 Track(对我来说也有意义,但如果你想保留它的数字也没关系。你可能希望添加一个 + scale_x_discrete() 然后为了让您的曲目在 x 轴上显示为整数)。

samp.data$Base <- factor(samp.data$Base)
samp.data$Track <- factor(samp.data$Track)

ggplot(samp.data, aes(x=Track, y=Length, fill=Base)) +
  geom_bar(stat='identity') +
  scale_fill_manual(values=c('red', 'blue', 'green', 'yellow'))

最后一行随意设置颜色。 如果您希望反转 x 轴顺序(以便您的轨道 2 先出现),请执行 + scale_x_reverse().

我不知道你问题中的 "ungroup the base" 是什么意思,但假设你想围绕每个 "chunk" 可以添加的 DNA 画一个轮廓(例如)colour="black"geom_bar 中(例如在轨道 1 中,有一个长度为 2 的 D 紧接着是一个长度为 3 的 D,因此它被绘制为一个长度为 5 的大 D - 添加 colour="black" 勾勒出 2-chunk尽管它们仍然具有相同的颜色)。