如何用R的plot()命令绘制箱线图?含二元列与数值列场景
关于R中plot()与boxplot()绘制箱线图的问题解答
问题1:是否可以使用plot()命令为数据框中的列绘制箱线图?
当然可以,但要注意**plot()是泛型函数**,它的行为会根据输入的数据类型灵活变化:
- 如果直接传入单个数值列(比如
plot(college$Accept)),默认会生成折线图,而非箱线图; - 但如果是数值列 + 分类/因子列的组合(也就是你第二个问题的场景),
plot()会自动触发箱线图的绘制逻辑,这点我们在问题2里展开说; - 如果只是想给单个数值列绘制箱线图,直接用
boxplot()会更直观,比如boxplot(college$Accept),当然也可以通过plot()结合boxplot()的返回值实现,但没必要多绕一步。
问题2:用plot()或boxplot()绘制二元列与数值列的箱线图
先解决你遇到的核心问题:你写的boxplot(college$Accept, college$Private)参数顺序搞反了!boxplot()的标准逻辑是以数值变量为分析对象,分类变量为分组依据,正确的语法是数值变量 ~ 分组变量(或者明确指定x为分组变量、y为数值变量)。你把二元分组列Private放在了数值参数的位置,程序把它当成数值处理,自然会画出扁平的异常图形。
正确的boxplot()用法:
# 推荐的公式写法,更清晰 boxplot(Accept ~ Private, data = college, main = "Accepted Versus Private") # 或者明确指定x(分组)和y(数值)参数 boxplot(x = college$Private, y = college$Accept, main = "Accepted Versus Private")
用plot()实现的方法:
正如前面提到的,plot()作为泛型函数,当传入因子类型的分组变量作为x轴、数值变量作为y轴时,会自动生成箱线图:
# 直接传入x(因子)和y(数值) plot(college$Private, college$Accept, main = "Accepted Versus Private") # 或者用公式写法,和boxplot逻辑一致 plot(Accept ~ Private, data = college, main = "Accepted Versus Private")
这样就能得到正常的、按Private分组的Accept数值箱线图了。
内容的提问来源于stack exchange,提问作者Aliza Miller




