ggplot2自定义函数方法
2022-08-20 本文已影响0人
斯希笔记
ggplot2自定义函数方法
前言:(百年更新,太懒了实在)最近写R包和平常使用的时候,有的时候想快速画一个自己定义好的图,每一次都要一长串代码,有点不是很方便,于是想编写一些画图函数,方便快速画图。但是在编写ggplot2自定义函数的时候碰到了一些问题,外部无法传递到ggplot2内部中,如:
1.存在的问题
以iris数据集为示例,画个散点图为例:
##函数
testplot <- function(data, x, y, colour){
ggplot(data,aes(x=x, y=y, colour=colour))+
geom_point()
}
##调用
testplot(iris, x=Sepal.Length, y=Sepal.Width, colour=Species)
testplot(iris, x="Sepal.Length", y="Sepal.Width", colour="Species")
1.1 调用方式一
testplot(iris, x="Sepal.Length", y="Sepal.Width", colour="Species")
结果表明只有一个点,明显和要求不一样
1.2 调用方式二
testplot(iris, x=Sepal.Length, y=Sepal.Width, colour=Species)
报错了
因此本文介绍三种方法用于构建ggplot2自定义
2.方法
2.1 利用ggplot2自带aes_string()函数来实现
# 函数
testplot <- function(data, x, y, colour){
ggplot(data,aes_string(x=x, y=y, colour=colour))+
geom_point()
}
##调用
testplot(iris, x="Sepal.Length", y="Sepal.Width", colour="Species")
结果正常,但是输入的时候要加“ ”的列名
2.2 利用生成变量赋值的方法
# 函数
testplot <- function(data, x, y, colour){
assign("x", data[,x]) ##将data中x列的值值赋给x变量,下面同理
assign("y", data[,y])
assign("colour", data[,colour])
ggplot(data,aes_string(x=x, y=y, colour=colour))+
geom_point()
}
##调用
testplot(iris, x="Sepal.Length", y="Sepal.Width", colour="Species")
有点麻烦,不如aes_string方便,但也可以实现,也是要用" "的列名
2.3 利用rlang包的特性,用{{ }}实现ggplot2同等效果
##加载包
library(rlang)
# 函数
testplot <- function(data, x, y, colour){
ggplot(data,aes(x={{x}}, y={{y}}, colour={{colour}}))+
geom_point()
}
#调用
testplot(iris, x=Sepal.Length, y=Sepal.Width, colour=Species)
结论,利用{{ }}实现ggplot2同等效果,输入时候不用列名不用加引号,个人比较喜欢第三种,实际情况上1,3我都有使用
2.4 后续待补充,暂时够用
终: 写这个单纯记录一下过程,避免后面自己忘记了。顺便吐槽一下现在生信太卷了