ggplot2绘制柱状图提示`train[[i]]`弃用警告如何解决?
错误原因分析
- 该警告是ggplot2的规范提示:不推荐在
aes()内部直接引用外部环境的数据集对象train[[i]],避免出现数据环境混淆的问题,推荐使用专门面向ggplot内部数据的代词.data来引用列 - 你直接替换
.data[[i]]后报错通常有两个常见诱因:- 你使用的ggplot2版本低于v3.0.0,尚未内置
.data代词支持 - 你原代码里的
y_title变量没有提前赋值,报错和.data替换无关
- 你使用的ggplot2版本低于v3.0.0,尚未内置
.data[[i]]的含义:.data是固定指向你传给ggplot(data=)的数据集的代词,这里就等价于指向train,[[i]]是取第i列的语法,该写法会直接从ggplot的内部数据环境取列,不受外部环境同名变量干扰,稳定性更高
解决方案
方案1:使用规范的.data写法(推荐)
首先升级你的ggplot2到最新正式版,然后提前定义缺失的y_title变量,修改后的代码如下:
index_qualitative_features <- c(4, 5, 9, 11, 12) i = index_qualitative_features[2] # 取值为5 x_title = colnames(train)[i] # 取值为"Sex" y_title = "计数" # 提前定义y轴标题,原代码缺失该变量 ggplot(data=train, aes(x = .data[[i]])) + geom_bar(width=0.3) + xlab(x_title) + ylab(y_title) + theme(axis.text = element_text(size=12), axis.title.x = element_text(size=13.5, face="bold"), axis.title.y = element_text(size=13.5, face="bold"))
方案2:兼容旧版本的写法
如果你不方便升级ggplot2,可以改用aes_string()来传入字符串形式的列名,也可以消除警告:
index_qualitative_features <- c(4, 5, 9, 11, 12) i = index_qualitative_features[2] x_title = colnames(train)[i] y_title = "计数" ggplot(data=train, aes_string(x = colnames(train)[i])) + geom_bar(width=0.3) + xlab(x_title) + ylab(y_title) + theme(axis.text = element_text(size=12), axis.title.x = element_text(size=13.5, face="bold"), axis.title.y = element_text(size=13.5, face="bold"))
内容的提问来源于stack exchange,提问作者lolodino77
相关产品推荐
相关产品推荐

