在 ggplot 中使用函数和变量列
Using a function and variable column within ggplot
我想为用户创建一个 ggplot 调用变量,而不更改脚本中的 ggplot 调用...
我有一个包含不同列的数据框,我想用它来标记绘图上的点。很多专栏都很长,我想提供一个函数 'shortname' 来稍微缩短该专栏...
我也想用一个变量来做这个变量,这就是我目前卡住的地方。
df <- data.frame(a=c('a;b;c','d;e;f'), b=c('A;B;C','D;E;F'),
x=c(1,2), y=c(2,3))
use_column <- 'b'
shortname <- function(x) {
sub('([^;]+).*', '\1', x)
}
g <- ggplot(df, aes(x,y)) + geom_point()
g + geom_text(aes(label=a))
g + geom_text(aes(label=shortname(a)))
g + geom_text(aes(label=shortname(b)))
到目前为止,一切都按预期进行。第一个图显示缩短的 a 列,第二个图显示 b 列。但是当我尝试使用变量时
use_column,我不明白 运行...
g + geom_text(aes_string(label=shortname(use_column)))
我运行没主意了,希望有人能帮我解决这个问题。
提前致谢!
问题是您在 b
上使用了 shortname
,returns b
。只有这样 aes_string
才会读取结果 b
并使用整个 b
进行评估。
您可以使用 "shortname(b)"
而不是 shortname("b")
来避免这种情况。即
g + geom_text(aes_string(label=paste('shortname(', use_column, ')')))
或者,您可以将 aes
与 get
一起使用。
g + geom_text(aes(label=shortname(get(use_column))))
我想为用户创建一个 ggplot 调用变量,而不更改脚本中的 ggplot 调用...
我有一个包含不同列的数据框,我想用它来标记绘图上的点。很多专栏都很长,我想提供一个函数 'shortname' 来稍微缩短该专栏...
我也想用一个变量来做这个变量,这就是我目前卡住的地方。
df <- data.frame(a=c('a;b;c','d;e;f'), b=c('A;B;C','D;E;F'),
x=c(1,2), y=c(2,3))
use_column <- 'b'
shortname <- function(x) {
sub('([^;]+).*', '\1', x)
}
g <- ggplot(df, aes(x,y)) + geom_point()
g + geom_text(aes(label=a))
g + geom_text(aes(label=shortname(a)))
g + geom_text(aes(label=shortname(b)))
到目前为止,一切都按预期进行。第一个图显示缩短的 a 列,第二个图显示 b 列。但是当我尝试使用变量时 use_column,我不明白 运行...
g + geom_text(aes_string(label=shortname(use_column)))
我运行没主意了,希望有人能帮我解决这个问题。
提前致谢!
问题是您在 b
上使用了 shortname
,returns b
。只有这样 aes_string
才会读取结果 b
并使用整个 b
进行评估。
您可以使用 "shortname(b)"
而不是 shortname("b")
来避免这种情况。即
g + geom_text(aes_string(label=paste('shortname(', use_column, ')')))
或者,您可以将 aes
与 get
一起使用。
g + geom_text(aes(label=shortname(get(use_column))))