首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >条形图中的拆分组

条形图中的拆分组
EN

Stack Overflow用户
提问于 2020-06-09 16:37:41
回答 1查看 632关注 0票数 0

我有一个数据帧,其中的值对应于两个单独的组,随着时间的推移进行评估。模拟数据如下:

代码语言:javascript
复制
Gene Name. Sample S1. Sample S2. Sample S3. Sample R1. Sample R2. Sample R3.
Gene 1         4          5          3          3          39        44
Gene 2         4         100        33          3          32        14

我融化了我的数据帧,并使用summarySE函数编译了摘要统计数据。然后我使用以下脚本绘制了我的数据:

代码语言:javascript
复制
plot = ggplot(tgastats2, aes(x=Gene Name, y=value, fill=Sample)) 
  + geom_bar(position=position_dodge(), stat="identity") +
  + geom_errorbar(aes(ymin=value-se, ymax=value+se),
                  + width=.2,
                  + position=position_dodge(.9))

我想要做的是将S1-3的值组合在一起,并将R1-3的值绘制在同一张图上,间隔一定的空间。任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-09 20:32:32

以下是可重现的数据:

代码语言:javascript
复制
df <- data.frame(
  Gene_name=c('Gene 1', 'Gene 2'),
  Sample.S1=c(4,4), Sample.S2=c(5,100), Sample.S3=c(3,33),
  Sample.R1=c(3,3), Sample.R2=c(39,32), Sample.R3=c(44,14)
)

现在,来看一个解决方案。正如您所指出的,我们需要“融化”数据集。我更喜欢使用dplyr中的gather(),但melt()的工作方式与此类似:

代码语言:javascript
复制
df1 <- df %>% gather(key='Sample', value='value', -Gene_name)

为了让ggplot2知道您希望以您指定的方式对数据进行分组,您需要对数据进行分类。R和ggplot不够聪明,无法理解S1、S2和S3属于一起,所以您必须告诉R如何做到这一点。分离和分类的方法可能有很多种。如果没有看到你实际的熔化的df,tgastats2,我不得不假设它和上面的例子很相似。我将使用所有样本R1-R3都包含大写"R“的事实,而其他样本不包含大写”R“:

代码语言:javascript
复制
df1$my_group <- ifelse(grepl('R',df1$Sample),'R','S')

然后,您可以绘制:

代码语言:javascript
复制
ggplot(df1, aes(x=Gene_name, y=value, fill=my_group)) +
  geom_col(position='dodge', color='black')

嗯..。看起来不太对劲。到底怎么回事?好的,ggplot是基于df1$my_group进行分离的,但是每个组中有3个值。除了fill=美学之外,您还可以通过使用group=美学将它们分离出来,ggplot将把它们完全分离出来:

代码语言:javascript
复制
ggplot(df1, aes(x=Gene_name, y=value, fill=my_group, group=Sample)) +
  geom_col(position='dodge', color='black')

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62278370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档