R语言自定义绘图函数求助:传入数据框与列名生成图表
问题分析与修复方案
你的代码存在几个关键问题,我帮你逐一修正:
核心问题点
- 函数定义名称是
makePlot,但调用时写的是make_rainplot,名称不匹配会触发“找不到函数”的错误 - 在
ggplot的aes()中直接使用col1、col2无法识别传入的列名,R函数里处理这类裸变量参数,需要用{{}}(整洁评估语法)来解析 - 映射逻辑错误:你把
y设为分组列col2(Species),但需求是用Age作为变量、按Species分组,应该将y设为Age,分组映射设为Species - 标题设置不符合需求:
title = col1会把列名Age作为标题,但你想要的是字符串"age" geom_point里的fill映射多余,点的颜色用color即可,除非你使用带填充的点形状(比如shape=21)
修正后的代码
# 先加载ggplot2包 library(ggplot2) # 重新定义函数 makePlot <- function(X, col1, col2) { p1 <- ggplot(X, aes(x = {{col2}}, y = {{col1}}, color = {{col2}})) + geom_point() + labs(x = "物种", y = "年龄", title = "age") # x/y标签可根据需求修改 return(p1) } # 正确调用函数(注意函数名与定义一致) makePlot(my_dataframe, Age, Species)
额外拓展
如果你的“rainplot”是指小提琴图加散点的组合图,可以修改成这样:
makePlot <- function(X, col1, col2) { p1 <- ggplot(X, aes(x = {{col2}}, y = {{col1}}, color = {{col2}})) + geom_violin(alpha = 0.3) + geom_jitter(width = 0.2, size = 2) + labs(x = "物种", y = "年龄", title = "age") return(p1) }
内容的提问来源于stack exchange,提问作者inprogress123
相关产品推荐
相关产品推荐

