如何在ggplot的aes()中使用paste拼接的动态列名绘图
问题原因
直接将字符串格式的列名传入aes()时,ggplot会默认将其识别为固定常量,而非数据框的列引用,因此无法正确映射到对应列的数值。
解决方案
使用ggplot2内置的.data代词完成字符串列名的引用,该方案仅依赖原生aes()函数,无需更换其他映射函数:
ggplot(df2, aes(x = .data[[paste0(names(df2)[1])]], y = Company, group = 1)) + geom_line()
说明
.data是ggplot2 v3.0.0及以上版本支持的专用代词,指向当前绘图传入的数据框- 用双括号
[[包裹字符串格式的列名,即可完成动态列的映射,即使列名包含空格、特殊符号也能正常识别 - 代码中的
paste0可以保留,如果你有拼接生成列名的需求,直接替换双括号内的内容即可生效 - 如果你更习惯用
as.name()转换列名的方式,配合卷曲运算符{{}}包裹也可以实现同等效果:ggplot(df2, aes(x = {{as.name(names(df2)[1])}}, y = Company, group = 1)) + geom_line()
内容的提问来源于stack exchange,提问作者jack kelly
相关产品推荐
相关产品推荐

