首页 > 解决方案 > 基于另一列的值的列的条形图

问题描述

我有类似以下数据集的内容:

1. Donation 2. Treatment 3. Category. 
2€              TG2           Teenager
1€              TG1           Adult
2€              TG2           Adult
and so on

有多个参与者。每个参与者都是特殊治疗组 (TG) 的一部分,并被分配到一个类别。

我现在想绘制两个这样的条形图:

  1. 一张图表中所有 TG 的捐赠
  2. 一张图表中的所有类别的捐赠

我不知道该怎么做。如果我使用 barplot(table(Donation)),它只会给我捐款的 barplot。我可以以某种方式将这些数据分组到条形图中吗?

例如

标签: rdataframeplotformattingbar-chart

解决方案


如果没有可重现的示例,很难确定这个答案是否适合您的数据集。

在这里,根据您提供的一些信息,我生成了一个假示例:

df <- data.frame(Donation = sample(1:20, 100, replace = TRUE),
                 Treatment = sample(c("TG1","TG2"), 100, replace = TRUE),
                 Category = sample(c("Teenager","Adult"), size = 100, replace = TRUE))

  Donation Treatment Category
1        2       TG2    Adult
2        6       TG2    Adult
3       11       TG1 Teenager
4       16       TG2    Adult
5        7       TG1 Teenager
6       17       TG2    Adult

您可以使用dplyr以下方式计算每个治疗组和类别的捐赠总和:

library(dplyr)
DF <- df %>% group_by(Treatment, Category) %>% 
  summarise(Sum = sum(Donation)) 

# A tibble: 4 x 3
# Groups:   Treatment [2]
  Treatment Category   Sum
  <fct>     <fct>    <int>
1 TG1       Adult      207
2 TG1       Teenager   236
3 TG2       Adult      372
4 TG2       Teenager   235

然后,您可以使用这个新的数据框“DF”来获取条形图ggplot2

library(ggplot2)
ggplot(DF, aes(x = Treatment, y = Sum, fill = Category))+
  geom_col(position = position_dodge())

在此处输入图像描述

编辑:分隔条形图

要仅获得每个治疗组的捐赠总和:

ggplot(DF, aes(x = Treatment, y = Sum, fill = Treatment))+
  geom_col()

在此处输入图像描述

仅获取每个类别的捐赠总和:

ggplot(DF, aes(x = Category, y = Sum, fill = Category))+
  geom_col()

在此处输入图像描述


推荐阅读