带有facet_grid的ggplot2中带有多个分类变量的堆积条形图

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带有facet_grid的ggplot2中带有多个分类变量的堆积条形图相关的知识,希望对你有一定的参考价值。

我正在尝试在ggplot2中创建堆积条形图,以显示与每个分类变量对应的值的百分比。以下是我尝试使用的数据示例。

sampledf <- data.frame("Death" = rep(0:1, each = 5), 
                   "HabitA" = rep(0:1, c(3, 7)),
                   "HabitB" = rep(1:2, c(4, 6)),
                   "HabitC" = rep(0:1, c(6, 4)))

每个习惯都是我用来创建堆积条形图的列,我想在facet_grid中使用Death列。我想在条形图中显示每种习惯的值的百分比。

我认为我需要创建图表的输出数据应转换为,在Death = 0下,HabitA有60%0值,40%的值为1,而在Death = 1时,100%的HabitA值为1 。

我使用ggplot和group_by生成了这样的图表,只对一个属性进行了汇总,但我不确定它如何与数据中的多个分类属性一起使用。

sampledf %>% 
  group_by(Death, HabitA) %>% 
  summarise(count=n()) %>% 
  mutate(perc=count/sum(count))

这只产生了我想要的一个变量,但是当我在group by参数中包含另一个属性时,它会返回所有3个属性的组合的百分比,这不是我想要的。我尝试使用summarise_at / mutate_at但它似乎没有工作。

sampledf %>% 
  group_by(Death) %>% 
  mutate_at(c("HabitA", "HabitB"), Counts = n())

有没有一种直接的方法在R中执行此操作,并使用结果数据作为ggplot2的输入?

编辑:

我试图重塑数据并使用长格式来构建我的情节。这就是我所拥有的。

long <- melt(sampledf, id.vars = c("Death"))

结果数据采用此格式。

  Death variable value
1     0   HabitA     0
2     0   HabitA     0
3     0   HabitA     0
4     0   HabitA     1
5     0   HabitA     1
6     1   HabitA     1
7     1   HabitA     1

我不确定如何使用value属性来构建绘图,因为我目前正在尝试构建的ggplot计算每个级别在variable列中出现的总次数。

ggplot(long, aes(x = variable, fill = variable)) +
  geom_bar(stat = "count", position = "dodge") + facet_grid(~ Death)
答案

试试这个,也许不是那么简单,但它确实有效。它包括重塑为gather建议的@aosmith。然后计算分组后的观察次数,然后计算每组Death + habitat的百分比。然后总结得到独特的价值观。

sampledf_edited <- sampledf %>% 
  tidyr::gather("habitat", "count", 2:4) %>% 
  group_by(Death, habitat, count) %>% 
  mutate(observation = n()) %>% 
  ungroup() %>% 
  group_by(Death, habitat) %>% 
  mutate(percent = observation/n()) %>% 
  ungroup() %>% 
  group_by(Death, habitat, count, percent) %>%
  summarize()

有必要制作qazxsw poi工厂。

count

sampledf_edited$count <- as.factor(sampledf_edited$count) 绘制。

ggplot

如果您的问题已得到解答,请务必接受答案以获得进一步的参考。

---编辑---情节补充

ggplot(sampledf_edited, aes(habitat, percent, fill = count)) + geom_bar(stat = "identity") + facet_grid(~ Death)

以上是关于带有facet_grid的ggplot2中带有多个分类变量的堆积条形图的主要内容,如果未能解决你的问题,请参考以下文章

ggplot2 facet_grid 带有构面标题

R语言ggplot2可视化使用facet_grid构建多个子图(facet面图)并自定义每个子图(facet面图)的文本实战

使用 purrr 时如何自定义 ggplot2 facet_grid 标签中的文本?

R语言高维数据可视化| ggplot2中会“分身术”的facet_wrap()与facet_grid()姐妹花

如何使用不同的几何图形将边际总计添加到 ggplot2 facet_grid 图

R语言ggplot2可视化绘制带有双y轴(double y axis)的分面图(facetfacet_grid)