请问如何使用变量来指定ggram中的列名

如何使用变量来指定ggram中的列名

我有个命令

ggplot( rates.by.groups, aes(x=name, y=rate, colour=majr, group=majr) )

在一个函数里。但是我希望能够使用函数的一个参数来选择列作为颜色和组。我想要这样的东西

f <- function( column ) {
    ...
    ggplot( rates.by.groups, aes(x=name, y=rate, colour= ??? , group=??? ) )}

以便由参数来确定ggg图中使用的列。例如,对于f(“main”),我们得到的效果是

ggplot( rates.by.groups, aes(x=name, y=rate, colour=majr, group=majr) )

但是对于f(“性别”),我们得到的效果是

  ggplot( rates.by.groups, aes(x=name, y=rate, colour=gender, group=gender) )

有些事我试过了:

ggplot( rates.by.groups, aes(x=name, y=rate, colour= columnName , group=columnName ) )

不起作用。也没有

e <- environment() ggplot( rates.by.groups, aes(x=name, y=rate, colour= columnName , group=columnName ), environment=e )


catspeake
浏览 690回答 3
3回答

慕田峪9158850

你可以用aes_string:f&nbsp;<-&nbsp;function(&nbsp;column&nbsp;)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;... &nbsp;&nbsp;&nbsp;&nbsp;ggplot(&nbsp;rates.by.groups,&nbsp;aes_string(x="name",&nbsp;y="rate",&nbsp;colour=&nbsp;column, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;group=column&nbsp;)&nbsp;)}只要将列作为字符串传递给函数(f("majr")而不是f(majr))。还请注意,我们更改了其他列,"name"和"rate"成为弦乐。如果不管出于什么原因你都不想用aes_string,您可以将其更改为(比较麻烦的):&nbsp;&nbsp;&nbsp;&nbsp;ggplot(&nbsp;rates.by.groups,&nbsp;aes(x=name,&nbsp;y=rate,&nbsp;colour=&nbsp;get(column), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;group=get(column)&nbsp;)&nbsp;)

HUWWW

另一种选择(ggplot2 > 3.0.0)是使用整齐的评价代词。.data将所选变量/列从rates.by.groups数据帧library(ggplot2)theme_set(theme_classic(base_size&nbsp;=&nbsp;14))#&nbsp;created&nbsp;by&nbsp;@Moody_Mudskipperrates.by.groups&nbsp;<-&nbsp;data.frame( &nbsp;&nbsp;name&nbsp;=&nbsp;LETTERS[1:3], &nbsp;&nbsp;rate&nbsp;=&nbsp;1:3, &nbsp;&nbsp;mjr&nbsp;=&nbsp;LETTERS[c(4,&nbsp;4,&nbsp;5)], &nbsp;&nbsp;gender&nbsp;=&nbsp;c("M",&nbsp;"F",&nbsp;"F"))f1&nbsp;<-&nbsp;function(df,&nbsp;column)&nbsp;{ &nbsp;&nbsp;gg&nbsp;<-&nbsp;ggplot(df,&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aes(x&nbsp;=&nbsp;name,&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y&nbsp;=&nbsp;rate,&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fill&nbsp;&nbsp;=&nbsp;.data[[column]],&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;group&nbsp;=&nbsp;.data[[column]]))&nbsp;+ &nbsp;&nbsp;&nbsp;&nbsp;geom_col()&nbsp;+ &nbsp;&nbsp;&nbsp;&nbsp;labs(fill&nbsp;=&nbsp;column) &nbsp;&nbsp;return(gg)}plot_list&nbsp;<-&nbsp;lapply(list("gender",&nbsp;"mjr"),&nbsp;function(x){&nbsp;f1(rates.by.groups,&nbsp;x)&nbsp;})plot_list#>&nbsp;[[1]]#>&nbsp;#>&nbsp;[[2]]#&nbsp;combine&nbsp;all&nbsp;plotslibrary(egg)ggarrange(plots&nbsp;=&nbsp;plot_list, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nrow&nbsp;=&nbsp;2, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;labels&nbsp;=&nbsp;c('A)',&nbsp;'B)'))创建于2019年-04-04由Reprex封装(0.2.1.9000)
打开App,查看更多内容
随时随地看视频慕课网APP