R 中具有多列的堆叠条形图

问题描述

这些问题对我有帮助,但解决方案仍然不正确。

Stacked bar chart in R

Stacked bar chart across multiple columns

我的数据框:

DevType <- c('Designer','Developer,Back',front','Engineer')
Salary <- c(120,340,72,400)
Master <- c('1','2','3','4')
Bachelor <- c('6','1','1')
University <- c('6','0','2')
data1 <- data.frame(DevType,Salary,Master,Bachelor,University)

由于问题,我创建了一个这样的列表:

data1 <- gather(data1,key,value,-DevType,-Salary)
开发类型 工资 价值
设计师 120 大师 1
开发人员 340 大师 3
工程师 72 大师 4
学生 400 大师 2
设计师 120 本科 6
开发人员 340 本科 8
工程师 72 本科 2
学生 400 本科 1
设计师 120 大学 2
开发人员 340 大学 3
工程师 72 大学 4
学生 400 大学 2

现在我想要一个堆叠的条形图。 x 轴:DevType y 轴:工资 DevTypes 的条形按值细分。 作为传奇,我需要钥匙。

我从问题中得到了这个:

ggplot(data1,aes(x = DevType,y = Salary))+
  geom_col(aes(fill = key))

我的问题之间的区别是,我的 y 轴不是值。 问题是正确的高度只有一个键,而且键的长度都一样。

enter image description here

感谢您的指点。

解决方法

更新

考虑到评论中的反复,似乎图表上的条形应该与平均工资相加,而我们希望看到的是不同教育水平的人对平均工资的相对贡献。

例如,Developer,front 的平均工资是 72,平均贡献了两个人,一个是学士学位,一个是硕士学位。因此,栏的高度应为 72,每个人应占总数的 36。

因此,我们根据对平均值的加权贡献来创建调整后的工资。

library(ggplot2)
library(tidyr)

DevType <- c('Designer','Developer,Back',front','Engineer')
Salary <- c(120,340,72,400)
Master <- c('1','2','3','4')
Bachelor <- c('6','1','1')
University <- c('6','0','2')
data1 <- data.frame(DevType,Salary,Master,Bachelor,University)

# gather data for subsequent processing
data1 <- data1 %>%
     gather(.,key,value,-DevType,-Salary) %>%
     type.convert(.,as.is = TRUE) 
data1 <- data1 %>% 
     group_by(DevType) %>% 
     # calculate denominators for salaries 
     summarise(.,salaryCount = sum(value)) %>%
     # merge salary counts
     left_join(.,data1) %>%
     # use number of participants as denominator so sums add up to average
     # salary
     mutate(adjSalary = if_else(value > 0,Salary * value / salaryCount,0))
   

# original chart - where y axis is adjusted so total matches average salary
# across participants who contributed to the average
ggplot(data1,aes(x = DevType,y = adjSalary))+
     geom_col(aes(fill = key))

...以及输出,其中条形总和为原始工资水平。

enter image description here

原答案

当您想要比较分组变量的不同类别的不同贡献与其在 y 轴变量上的值之和时,堆积条形图很有用。然而,从数据看来,提问者试图按教育水平比较不同角色的工资水平。

在这种情况下,分组条形图比堆叠条形图更有用,因为分组图直观地比较了 x 轴变量类别中第三个分组变量的类别。

library(ggplot2)
library(tidyr)

DevType <- c('Designer',University)

data1 <- gather(data1,-Salary)

# use grouped bar chart instead
ggplot(data1,y = Salary,fill = key)) +
     geom_bar(position = "dodge",stat = "identity")

...和输出:

enter image description here

注意:如原帖所述,每个关键变量的工资水平在 x 轴变量的每个类别中都是恒定的,因此图表不是特别有趣。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...