我的代码。
function (var1, var2) {
if (var1 = flowrate) {label <- bquote('Flow rate ('*mu~'litre)'))}
else if (var1 = stress) {label <- bquote('Average velocity ('*m^2*s^-1*')')}
ggplot{} +
... +
ylab(label)
}
我要的是 ylab(label)
部分来使用公式,但这样一来,它就会以引号字符串的形式进行绘图和打印。例如,当 var1 = flowrate
,它打印 bquote('Flow rate ('*mu~'litre)')
作为y轴,而不是解释真正的含义。这里也有类似的情况,但不能适用于我的情况。把一个字符串赋给一个没有双引号的对象。
这一定是一个很粗糙的方法,因为我不知道正确的方法,但我会感谢任何修复这个问题的建议或更好的方法来实现这个目标。
谢谢你的时间!我的代码:function (var1, var2) { if (var1, var2)
这里是另一个选择,使用你的 sampleData
和 aes_string
sampleData <- data.frame(Sample = sample(10:20, 8), randomNum = rnorm(8)
, fruit = fruit[48:55], Blender =
c('a','b','c','a','b','c','a','b'))
plot_it <- function(df, x, y, fill) {
if (y == 'randomNum') {label <- bquote('Flow rate ('*mu~'litre)')}
else if (y == 'Sample') {label <- bquote('Average velocity ('*m^2*s^-1*')')}
else {label <- 'ylab'}
ggplot(df, aes_string(x, y, fill = fill)) +
geom_boxplot() +
ylab(label)
}
plot_it(sampleData, "Blender", "randomNum", 'fruit')
编辑:如 aes_string
已被软性废弃,这里还有另一个选择(似乎是当前的),即使用 sym
和 !!
将引用的字符串变为一个变量,如图所示。此处.
plot_it_sym <- function(df, x, y, fill) {
vars <- syms(c(x, y, fill))
if (y == 'randomNum') {label <- bquote('Flow rate ('*mu~'litre)')}
else if (y == 'Sample') {label <- bquote('Average velocity ('*m^2*s^-1*')')}
else {label <- 'ylab'}
ggplot(df, aes(x = !!vars[[1]], y = !!vars[[2]], fill = !!vars[[3]])) +
geom_boxplot() +
ylab(label)
}
plot_it_sym(sampleData, 'Blender', 'randomNum', 'fruit')
对不起,一些奇怪的错误,主要是由于不完整的发生在 if-else
语句,但现在它的工作。不删除这个问题,因为有人可能会觉得这很有用。改编自:
library(tidyverse)
sampleData <- data.frame(Sample = sample(10:20, 8), randomNum = rnorm(8)
, fruit = fruit[48:55], Blender =
c('a','b','c','a','b','c','a','b'))
sampleData
#> Sample randomNum fruit Blender
#> 1 14 0.50009746 mandarine a
#> 2 10 1.37473946 mango b
#> 3 11 1.71557219 mulberry c
#> 4 18 0.40837073 nectarine a
#> 5 16 2.18151795 nut b
#> 6 20 -1.59481280 olive c
#> 7 12 -0.01976708 orange a
#> 8 17 -1.34631557 pamelo b
boxViolinPlot.fun <- function(data, fill, x, y) {
# except `data`, other input variables should be double quoted!
library(ggplot2)
if (y == "randomNum")
{label <- bquote('Flow rate ('*mu~'litre)')}
if (y == "Sample")
{label <- bquote('Average velocity at outlet ('*m^2*s^-1*')')}
else {ylab <- 'ylab'}
ggplot(data, aes(x = .data[[x]], y = .data[[y]], fill = .data[[fill]]
)) + geom_boxplot(# varwidth = .1,
width = 0.5, alpha = 0.75) + ylab(label) #+ scale_y_log10()
}
boxViolinPlot.fun(data = sampleData, x = "Blender", y = "randomNum",
fill = "fruit")
创建于2020-06-12 重读包 (v0.3.0)