aggregate计算方式对geom_text绘图的影响及报错原因咨询
关于aggregate计算均值后geom_text报错的疑问
我在网上找了一段R代码,调整后用来可视化mtcars数据集里不同气缸数(cyl)对应的油耗(mpg)分布,还想加上均值标注,但过程中遇到了几个报错,实在搞不懂背后的原因。
我用4种不同方式计算了不同cyl对应的mpg均值,完整代码如下:
library(ggplot2) mtcars$cyl <- as.factor(mtcars$cyl) means1 <- aggregate(mtcars[1], mtcars[2], mean) means2 <- aggregate(list(mpg = mtcars$mpg), list(cyl = mtcars$cyl), mean) means3 <- aggregate(mtcars[1], list(mtcars$cyl), mean) means4 <- aggregate(mtcars$mpg, mtcars[2], mean) means <- means1 #或means2, means3, means4 means[2] <- round(means[2], digits=2) p <- ggplot(data = mtcars, aes(x = cyl, y = mpg))+ geom_dotplot(binaxis = "y", stackdir = "center") p + stat_summary(fun.data = "mean_sdl", fun.args = list(mult = 1), geom = "errorbar", width = 0.2, color = "red") + stat_summary(fun.y = mean, geom = "point", color = "red") + geom_text(data = means, aes(label = means[2]),hjust = -0.5)
测试后发现:
- 用means1或means2时,整个代码能正常运行,生成带均值标注的图表
- 用means3时,会弹出报错:
Error in FUN(X[[i]], ...) : object 'cyl' not found.
- 用means4时,报错信息是:
Error: Aesthetics must be either length 1 or the same as the data (3): label, x, y
但只要去掉最后一行里的geom_text(...)部分,不管用means3还是means4,都能正常生成带误差棒和均值点的图表。
我现在有几个具体的疑问:
- 这四种均值计算方式的差异,到底是如何影响最后一行geom_text代码的?具体是什么原因导致了这两个报错?
- 为什么去掉geom_text语句后,means3和means4就不再报错了?
- 对比过四个means数据框的结构后,还有两个小困惑:
- 用
geom_text(data = means, aes(label = mpg) )时,means1和means2都能正常显示标注,但means3的第二列明明也叫mpg,为什么这么写还是会报错? - 针对means4,因为它没有mpg列,我改成了
geom_text(data = means, aes(label = means[2]),但means4里有cyl列,且数据行数是3(和x轴的cyl水平数一致),为什么还是会报长度不匹配的错误?
- 用
内容的提问来源于stack exchange,提问作者eve
相关产品推荐
相关产品推荐

