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。
我有一个数据框,它实际上是将两个独立的结果合并为一个,每个基因都有两个对照样本(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。