绘图和箱线图(使用包 ggplot)给出了不同的结果

The plot and boxplot (using package ggplot) give the different results

我写了这两个代码,它们似乎给出了不同的结果。

我认为plot()给出的代码是正确的

谁能说出为什么 boxplot() 给出的结果与 plot() 不同,而且 boxplot() 给出的图似乎有问题

顺便说一句,数据集来自R中的包MASS,叫做Boston

install.packages('MASS')
library(MASS)
data_set1<-data(Boston,package='MASS')
attach(Boston)
par(mfrow=c(1,2))
boxplot(rad,crim,log='y')
plot(crim~as.factor(rad),log='y')

最好的, 马蹄

请务必注意,boxplotplot 是通用函数,根据传递给它们的内容,它们的行为会有所不同。在这种情况下,因为您在图中指定了一个因子作为 x 变量,所以它实际上归结为比较

boxplot(rad, crim, log='y')
boxplot(crim ~ as.factor(rad),log='y')

所以你要么在第一种情况下传递两个不同的参数,要么在第二种情况下传递一个公式。这些行为非常不同。如果你不使用公式,你只是得到你传入的每个变量的箱线图。你可以看到如果你添加其他列名会发生什么

boxplot(rad, crim, zn, dis, log='y')

在那里你可以看到你只是为你传入的每个变量得到一个单独的箱形图。“1”是所有观察的 rad 变量的分布,“2”是crim,依此类推。

当你打电话时

boxplot(crim ~ as.factor(rad),log='y')

您将获得 rad 的每个唯一值的箱线图。使用公式语法时,实际上不可能添加 over 变量。

有关详细信息,请参阅 ?boxplot 帮助页面。

我还应该提到它通常是 bad idea to use attach()。对于支持它的函数最好使用 data= 参数,对于不支持它的函数使用 with() 参数会更好。例如

with(Boston, boxplot(crim, rad, log="y"))
boxplot(crim~rad, log="y", data=Boston)