美文网首页
ggplot2自定义函数方法

ggplot2自定义函数方法

作者: 斯希笔记 | 来源:发表于2022-08-20 15:38 被阅读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 后续待补充,暂时够用

终: 写这个单纯记录一下过程,避免后面自己忘记了。顺便吐槽一下现在生信太卷了

相关文章

网友评论

      本文标题:ggplot2自定义函数方法

      本文链接:https://www.haomeiwen.com/subject/muvvgrtx.html