如何在ggplot面板图中对数据取子集?找不到“.”函数报错怎么解决
报错原因
你遇到的could not find function "."报错,是因为代码中使用的.( )是plyr包提供的专用语法,没有预先加载plyr包时就会触发该报错。此外当前新版ggplot2已经不推荐在geom几何层直接使用subset参数,该参数属于旧版兼容语法,后续版本存在被移除的风险。
修复方案
方案1:快速适配原有代码
仅需在加载包的代码段新增plyr包的引用即可,修改后的加载包部分如下:
library(ggplot2) library(reshape2) library(plyr) # 新增这一行即可运行原有后续代码
方案2:推荐写法(适配新版ggplot2,无额外依赖)
使用data参数配合base自带的subset函数完成数据筛选,无需额外加载plyr包。同时你的代码可以大幅简化:你已经将数据转换为长表且配置了facet_grid按variable分面,不需要逐变量添加geom_col层,直接添加一层geom_col即可自动将对应变量的数据匹配到对应面板。
修改后的完整代码如下:
# 加载数据 # 数据来源: data analysis-gullies > R Stats Input > Panel Chart df <- read.csv(file.choose(), header = T) View(df) # 加载依赖包 library(ggplot2) library(reshape2) # 转换为长表 dfm <- melt(df, id.vars =c("Interval")) View(dfm) # 绘制分面图 ggplot(dfm, aes(Interval, value, colour = "grey20")) + geom_col(fill = "grey20") + # 仅需一层geom_col即可,分面自动匹配数据 scale_colour_identity() + xlim(5,1115)+ facet_grid(variable ~ ., scales = "free", as.table = FALSE) + theme_bw() + theme(panel.spacing = unit(0, "lines"), axis.title.x = element_blank(), axis.title.y = element_text())
如果你确实需要为不同变量配置不同的几何层样式,才需要逐层指定数据筛选,写法参考如下:
# 单层级指定筛选数据示例 test + geom_col(data = subset(dfm, variable == "Count"), fill = "red")
内容的提问来源于stack exchange,提问作者mpearson
相关产品推荐
相关产品推荐

