Изменение метки условных обозначений R при использовании get

#r #ggplot2 #legend

#r #ggplot2 #легенда

Вопрос:

Предположим, у вас есть данные:

 df = data.frame(A = rep(1:10,each=10),B = rep(1:10,times=10),C = runif(100,0,1))
 

Я написал функцию, которая принимает имя столбца в качестве аргумента:

 plotFill<-function(dataframe,variable){
  if(!(variable %in% names(dataframe))) stop("Variable not in data.frame")
  plot = ggplot(data=dataframe,aes(x=A,y=B,z=get(variable)))   
     geom_tile(aes(fill=get(variable)))
  return(plot)
}
 

Поэтому вы можете выполнить это выполнение: plotFill(df,"C")

Я пытаюсь обозначить легенду именем переданной переменной, но добавление labs(colour=variable) не работает, что, я думаю, и должно быть, поскольку переменная является строкой…

Ответ №1:

Если речь идет только о названии метки, вы могли бы использовать plot$labels$fill:

 plotFill<-function(dataframe,variable){
  if(!(variable %in% names(dataframe))) stop("Variable not in data.frame")
  plot = ggplot(data=dataframe,aes(x=A,y=B,z=get(variable)))   
    geom_tile(aes(fill=get(variable)))

  plot$labels$fill <- variable

  return(plot)
}

 

Ответ №2:

Вы не должны использовать get здесь. Вместо этого используйте aes_string .

 plotFill<-function(dataframe,variable){
  if(!(variable %in% names(dataframe))) stop("Variable not in data.frame")
  plot = ggplot(data=dataframe,aes_string(x="A",y="B",z=variable))   
    geom_tile(aes_string(fill=variable))
  return(plot)
}

plotFill(df,"C")