为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

catspeake 2019-11-06 12:05:43
如何使用变量来指定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 )
查看完整描述

3 回答

?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

你可以用aes_string:

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

只要将列作为字符串传递给函数(f("majr")而不是f(majr))。还请注意,我们更改了其他列,"name""rate"成为弦乐。

如果不管出于什么原因你都不想用aes_string,您可以将其更改为(比较麻烦的):

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



查看完整回答
反对 回复 2019-11-07
?
HUWWW

TA贡献1874条经验 获得超12个赞

另一种选择(ggplot2 > 3.0.0)是使用整齐的评价代词。.data将所选变量/列从rates.by.groups数据帧

library(ggplot2)theme_set(theme_classic(base_size = 14))# created by @Moody_Mudskipperrates.by.groups <- data.frame(
  name = LETTERS[1:3],
  rate = 1:3,
  mjr = LETTERS[c(4, 4, 5)],
  gender = c("M", "F", "F"))f1 <- function(df, column) {
  gg <- ggplot(df, 
         aes(x = name, 
             y = rate, 
             fill  = .data[[column]], 
             group = .data[[column]])) +
    geom_col() +
    labs(fill = column)
  return(gg)}plot_list <- lapply(list("gender", "mjr"), function(x){ f1(rates.by.groups, x) })plot_list#> [[1]]
#> #> [[2]]
# combine all plotslibrary(egg)ggarrange(plots = plot_list,
          nrow = 2,
          labels = c('A)', 'B)'))

创建于2019年-04-04由Reprex封装(0.2.1.9000)



查看完整回答
反对 回复 2019-11-07
  • 3 回答
  • 0 关注
  • 676 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信