R语言 ggplot2:带有组、位置减淡和填充的几何条形图

e5nszbig  于 2023-01-03  发布在  其他
关注(0)|答案(5)|浏览(178)

我试图生成一个柱状图,使x轴按患者显示,每个患者有多个样本。例如(使用mtcars数据作为数据的模板):

library("ggplot2")
ggplot(mtcars, aes(x = factor(cyl), group = factor(gear))) +
   geom_bar(position = position_dodge(width = 0.8), binwidth = 25) +
   xlab("Patient") +
   ylab("Number of Mutations per Patient Sample")

这将产生如下结果:

每个条形图代表每个患者的一个样本。
我想通过使用颜色填充条形图来添加关于每个患者样本的附加信息(例如,每个患者样本中的不同类型突变)。我想我可以如下指定填充参数:

ggplot(mtcars, aes(x = factor(cyl), group = factor(gear), fill = factor(vs))) +
   geom_bar(position = position_dodge(width = 0.8), binwidth = 25) +
   xlab("Patient") +
   ylab("Number of Mutations per Patient Sample")

但这并不会为每个患者样本条形图生成“堆叠条形图”。我假设这是因为position_dodge()已设置。是否有办法解决这个问题?基本上,我想要的是:

ggplot(mtcars, aes(x = factor(cyl), fill = factor(vs))) +
   geom_bar() +
   xlab("Patient") +
   ylab("Number of Mutations per Patient Sample")

但是有了我列出的第一个图中可用的这些颜色,这在ggplot2中有可能吗?

lrl1mhuk

lrl1mhuk1#

我认为facet是最接近你所寻找的东西:

ggplot(mtcars, aes(x = factor(gear), fill = factor(vs))) +
    geom_bar(position = position_dodge(width = 0.8), binwidth = 25) +
    xlab("Patient") +
    ylab("Number of Mutations per Patient Sample") +
    facet_wrap(~cyl)

我没有在ggplot2的问题追踪器中找到任何相关内容。

8xiog9wr

8xiog9wr2#

如果我没理解错的话,你想把aes()传入geom_bar层,这将允许你传递一个填充美学,然后你可以根据你想要的数据显示方式,把你的条设置为"dodge"或"fill"。
下面列出了一个简短的示例:

ggplot(mtcars, aes(x = factor(cyl), fill = factor(vs))) +
      geom_bar(aes(fill = factor(vs)), position = "dodge", binwidth = 25) +
      xlab("Patient") +
      ylab("Number of Mutations per Patient Sample")

使用结果图:http://imgur.com/ApUJ4p2(抱歉,S/O还不允许我发布图像)
希望能有所帮助!

cfh9epnr

cfh9epnr3#

我已经破解了几次,按照我喜欢的顺序将多个geom_cols层叠在一起。

ggplot(data, aes(x=cert, y=pct, fill=Party, group=Treatment, shape=Treatment)) +
      geom_col(aes(x=cert, y=1), position=position_dodge(width=.9), fill="gray90") +
      geom_col(position=position_dodge(width=.9)) +
      scale_fill_manual(values=c("gray90", "gray60"))

允许我生成你正在寻找的没有刻面的特征。注意我是如何将背景层的y值设置为1的。要添加更多的层,你可以累加你的变量。
图的图像:

csga3l58

csga3l584#

我想,我在这篇文章中的回答将帮助您为每个患者建立多个堆叠竖条的图表...
Layered axes in ggplot?

6jjcrrmo

6jjcrrmo5#

我没有看到上面建议的一种方法是使用facet_wrap按患者分组样本,然后按样本堆叠突变。消除了回避的需要。还更改和修改了用于匹配问题的mtcar属性,并在突变属性中获得更多变化。

patients <-c('Tom','Harry','Sally')
    samples <- c('S1','S2','S3')
    mutations <- c('M1','M2','M3','M4','M5','M6','M7','M8')
    
    ds <- data.frame(
        patients=patients[mtcars$cyl/2 - 1],
        samples=samples[mtcars$gear - 2],
        mutations=mutations[mtcars$carb]
    )
    ggplot(
        ds, 
        aes(
            x      = factor(samples), 
            group  = factor(mutations),
            fill   = factor(mutations)
        )
    ) +
       geom_bar() +
       facet_wrap(~patients,nrow=1) +
       ggtitle('Patient') +
       xlab('Sample') +
       ylab('Number of Mutations per Patient Sample') +
       labs(fill = 'Mutation')

输出现在具有与请求的特定语言相匹配的标签......更容易看到正在发生的事情。
Image of the plot

相关问题