可视化 R 中的水平箱线图

数据挖掘 r 可视化
2021-09-30 12:25:50

我有一个这样的数据集。数据是通过问卷收集的,我将做一些探索性的数据分析。

windows <- c("yes", "no","yes","yes","no")
sql     <- c("no","yes","no","no","no")
excel  <- c("yes","yes","yes","no","yes")
salary <- c(100,200,300,400,500 )

test<- as.data.frame (cbind(windows,sql,excel,salary),stringsAsFactors=TRUE)
test[,"salary"] <- as.numeric(as.character(test[,"salary"] ))

我的数据集中有一个结果变量(薪水)和几个输入变量(工具)。如何可视化这样的水平箱线图: 在此处输入图像描述

2个回答

让我们从创建一些假数据集开始。

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函数/方法,首先创建数据框(将用于最终绘图),如下所示:reshapeRtest

# 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)

这应该创建一个图,如:

左侧窗格显示了通过条形图表示的不同软件使用方式的计数,右侧窗格显示了按使用的软件分组的工资分布,通过箱线图表示。

您将需要创建一个包含软件信息的列 - 例如将其命名为软件,并且薪水列具有相应的薪水,例如

 Software   Salary
 Microsoft  100
 Microsoft  300
 Microsoft  400
 SQL        200

依此类推...然后您可以使用下面的代码进行绘图

p <- ggplot(test, aes(factor(software), salary))
p + geom_boxplot() + coord_flip()