如何通过R函数将多个参数传递给ggplot(美学和比例格式)? 如何将多个参数传递给ggplot函数?
下面是一个我想自动绘制的示例如何通过R函数将多个参数传递给ggplot(美学和比例格式)? 如何将多个参数传递给ggplot函数?,r,function,ggplot2,R,Function,Ggplot2,下面是一个我想自动绘制的示例 library(ggplot2) library(scales) p <- ggplot(diamonds, aes(x=cut, y=price) ) + geom_boxplot() + scale_y_continuous(labels = dollar) p 对于var1,我得到: Error: Discrete value supplied to continuous scale 和var2: Error in f(..., sel
library(ggplot2)
library(scales)
p <- ggplot(diamonds, aes(x=cut, y=price) ) +
geom_boxplot() +
scale_y_continuous(labels = dollar)
p
对于var1,我得到:
Error: Discrete value supplied to continuous scale
和var2:
Error in f(..., self = self) : Breaks and labels are different lengths
问题1。为什么不起作用?这对我来说是最重要的问题
然后我想制作多个图,我可以用for循环来完成,但我一直听说我应该用apply来完成。这是我试过的
问题2。如何使多个图形与apply一起工作
FirstPlotData <- c("price","dollar")
SecondPlotData <- c("depth", "comma")
plotMetaData <- data.frame(FirstPlotData,SecondPlotData)
mapply会工作吗?怎么做
mapply(mytestfunction,plotMetaData[1,],plotMetaDataList[2,])
提前谢谢。我注意到我可以用facet绘制多个图形,但对于我更复杂的例子,隐藏异常值、缩放和统计,然后绘制多个图并放入cowplot网格似乎更容易。您可能需要
aes\u string
。此函数的设计目的是使使用ggplot编程更容易(类似的想法也适用于dplyr
命令)。以下工作:
library(tidyverse)
data(diamonds)
myfunction <- function(var1){
p <- ggplot(diamonds, aes_string(x="cut", y= var1) ) +
geom_boxplot()
p
return(p)
}
myfunction("price")
使用应用程序?
为此,我倾向于使用循环(欢迎其他人不同意)。如果您开始使用应用方法,那么您可能希望apply
,因为lappy
、mappy
、vapply
和sapply
分别是列表应用、多元应用、向量应用和简单应用。试试这个
library(ggplot2)
library(scales)
library(rlang) # for sym
myfunction <- function(var1,var2){
p <- ggplot(diamonds, aes(x=cut, y= !! sym(var1)) ) +
geom_boxplot() +
scale_y_continuous(labels = get(var2))
p
return(p)
}
myfunction('price','dollar')
库(ggplot2)
图书馆(比例尺)
图书馆(rlang)#用于sym
myfunction您能提供一个输出示例吗?添加了数字和错误输出。查找(和谷歌)函数aes_string()。谢谢Joran,这将解决第一个问题。谢谢。在一个完美的世界中,相同的语法可以解决这两个问题?我想您可能希望安装一个最新版本的ggplot2-对评估(我想)进行了一些更新,代码可以在3.0.0+上运行,但不是我以前安装的非常旧的版本,但注意我在get()中使用了下面的aes_string()从这个answer.aes_字符串可以解出aes部分,但另一个答案也可以对刻度进行排序。对我来说,For循环似乎也更容易。
mapply(mytestfunction,plotMetaData[1,],plotMetaDataList[2,])
library(tidyverse)
data(diamonds)
myfunction <- function(var1){
p <- ggplot(diamonds, aes_string(x="cut", y= var1) ) +
geom_boxplot()
p
return(p)
}
myfunction("price")
# works
ggplot(diamonds, aes(x=cut, y= price) ) + geom_boxplot()
# these 2 are equivalent, but do not work
ggplot(diamonds, aes(x=cut, y= "price") ) + geom_boxplot()
var1 = "price"
ggplot(diamonds, aes(x=cut, y= var1) ) + geom_boxplot()
# these 2 are equivalent, both works but inputs are strings
ggplot(diamonds, aes_string(x="cut", y= "price") ) + geom_boxplot()
var1 = "price"
ggplot(diamonds, aes_string(x="cut", y= var1) ) + geom_boxplot()
library(ggplot2)
library(scales)
library(rlang) # for sym
myfunction <- function(var1,var2){
p <- ggplot(diamonds, aes(x=cut, y= !! sym(var1)) ) +
geom_boxplot() +
scale_y_continuous(labels = get(var2))
p
return(p)
}
myfunction('price','dollar')