让我们从创建一些假数据集开始。
software = sample(c("Windows","Linux","Mac"), n=100, replace=T)
salary = runif(n=100,min=1,max=100)
test = data.frame(software, salary)
这应该创建一个test
看起来有点像的数据框:
software salary
1 Windows 96.697217
2 Linux 29.770905
3 Windows 94.249612
4 Mac 71.188701
5 Linux 94.028326
6 Linux 7.482632
7 Mac 98.841689
8 Mac 81.152623
9 Windows 54.073761
10 Windows 1.707829
EDIT based on comment请注意,如果上述格式的数据尚不存在,则可以将其更改为这种格式。让我们以原始问题中提供的数据框为例,假设该数据框被调用raw_test
。
windows sql excel salary
1 yes no yes 100
2 no yes yes 200
3 yes no yes 300
4 yes no no 400
5 no no yes 500
现在,使用in 包中的melt
函数/方法,首先创建数据框(将用于最终绘图),如下所示:reshape
R
test
# use melt to convert from wide to long format
test = melt(raw_test,id.vars=c("salary"))
# subset to only select where value is "yes"
test = subset(test, value == 'yes')
# replace column name from "variable" to "software"
names(test)[2] = "software"
现在,您将获得如下所示的 datframe test
:
salary software value
1 100 windows yes
3 300 windows yes
4 400 windows yes
7 200 sql yes
11 100 excel yes
12 200 excel yes
13 300 excel yes
15 500 excel yes
创建了数据集。我们现在将生成绘图。
首先,根据代表使用率的软件计数在左侧创建条形图。
p1 <- ggplot(test, aes(factor(software))) + geom_bar() + coord_flip()
接下来,在右侧创建箱线图。
p2 <- ggplot(test, aes(factor(software), salary)) + geom_boxplot() + coord_flip()
最后,将这两个图并排放置。
require('gridExtra')
grid.arrange(p1,p2,nrow=1)
这应该创建一个图,如: