ggplot geom_bar:具有相同名称的多个样本,未并排绘制

ggplot geom_bar: Multiple samples with same name, plotted not side by side

我有一个数据框,它实际上是将两个独立的结果合并为一个,每个基因都有两个对照样本(FRC190 和 FRC193)和 3 个未知数。我想按照你阅读的顺序绘制它,每个基因都用颜色分组。

   SampleID RelativeCopy Loci
1    FRC190     2.040265  ABR
2    FRC193     1.961293  ABR
3     FC124     1.828341  ABR
4    FCP920     2.016274  ABR
5   E-NH021     1.919309  ABR
6    FRC190     1.973149 APRT
7    FRC193     2.027592 APRT
8    FCP604     2.086984 APRT
9    FCP686     2.027592 APRT
10  FCP1130     1.936854 APRT

我能做的几乎就是这些,首先,如果我使用这段代码,我会按顺序获取数据,除了两个控件一起绘制。

    df <- within(df, SampleID <- factor(
    df$SampleID, levels = c('FRC190', 'FRC193', 'FCP920', 'E-NH021',
   'FC124', 'FCP1130', 'FCP604', 'FCP686' )))

    ggplot(data = df, aes(x=SampleID,y=RelativeCopy, fill = Loci))+scale_fill_grey() +
    geom_bar(stat="identity", position=position_dodge())+ theme_classic()

我尝试的另一个选项是将控件重命名为不同的名称(即 FRC190-1 和 FRC190-2),然后覆盖轴上的名称。 用于此的代码是

df <- within(df, SampleID <- factor(
df$SampleID, levels = c('FRC190', 'FRC193', 'FCP920', 'E-NH021', 'FC124',"FRC190-2",
 "FRC193-2",'FCP1130', 'FCP604', 'FCP686' )))

ggplot(data = df, aes(x=SampleID,y=RelativeCopy, fill = Loci))+scale_fill_grey()+
geom_bar(stat="identity", position=position_dodge()) + theme_classic() +
scale_x_discrete(breaks=c('FRC190', 'FRC193', 'FCP920', 'E-NH021', 'FC124',"FRC190","FRC193", 'FCP1130', 'FCP604', 'FCP686' ))

这解决了控件分组的第一个问题并允许正确的顺序,但不允许使用相同的名称。

要按顺序绘制,您只需为 x 使用虚拟变量即可:

p <- ggplot(df, aes(x=1:nrow(df), y=RelativeCopy, fill=Loci)) +
    geom_bar(stat="identity", position=position_dodge()) + 
    theme_classic() + scale_fill_grey()

然后要更改 x 标签,您可以对 scale_x_* 使用 labels 参数:

p + scale_x_discrete(labels=df$SampleID, breaks=1:nrow(df), limits=1:nrow(df), name='SampleID')
  • labels=df$SampleID 设置 x 刻度标签
  • breaks=1:nrow(df) 说我们要在每根柱上绘制一个刻度线
  • limits=1:nrow(df) 如果你把它排除在外,情节看起来有点不居中(x 轴上的比例上升到 11,而不是 nrow(df) 的 10)
  • name='SampleID' 只是设置 x 轴的标签。

如果他们 运行 成彼此,您可能还希望 rotate your axis labels