Я пытался создать функцию, которая автоматизирует изменение некоторых слоев ggplot. В частности, я написал функцию, которая должна изменять axis.text и axis.title.

axis_view_presentation<-function(plot,data,axis_title_x,axis_title_y,...)
{
 #browser()
  if(axis_title_x==TRUE & axis_title_y==TRUE )
  {
    plot+theme(plot.title = element_text(hjust=0.5,size=20,face="bold"),
      axis.text.x = element_text(size=18,hjust=1,...),
      axis.text.y = element_text(size=18,hjust=1,...),
      axis.title.x =element_text(size=18,...),
      axis.title.y = element_text(size=18,...))

  }

  if(axis_title_x==FALSE & axis_title_y==TRUE )
  {
    plot+theme(plot.title = element_text(hjust=0.5,size=20,face="bold"),
      axis.text.x = element_text(size=18,hjust=1,...),
      axis.text.y = element_text(size=18,hjust=1,...),
      axis.title.x =element_blank(),
      axis.title.y = element_text(size=18,...))
  }

  if(axis_title_x==TRUE & axis_title_y==FALSE )
  {
    plot+theme(plot.title = element_text(hjust=0.5,size=20,face="bold"),
      axis.text.x = element_text(size=18,hjust=1,...),
      axis.text.y = element_text(size=18,hjust=1,...),
      axis.title.y =element_blank(),
      axis.title.x = element_text(size=18,...))
  }

  if(axis_title_x==FALSE & axis_title_y==FALSE )
  {
    plot+theme(plot.title = element_text(hjust=0.5,size=20,face="bold"),
      axis.text.x = element_text(size=18,hjust=1,...),
      axis.text.y = element_text(size=18,hjust=1,...),
      axis.title.x =element_blank(),
      axis.title.y = element_blank())
  }

}

Воспроизводимый пример

data<-data.frame(x=rnorm(20),y=rnorm(20))
p<-ggplot(data=data,aes(x=x,y=y))+
        geom_point()

Это возвращает это

enter image description here

Если я вызываю свою функцию с помощью

 p%>%axis_view_presentation(data=data,axis_title_x=TRUE,axis_title_y=FALSE)

Это дает мне тот же сюжет, что и выше

Любое предложение?

1
Marco Fumagalli 21 Июн 2018 в 16:57

1 ответ

Лучший ответ

Вам нужно вернуть сюжет

    axis_view_presentation<-function(plot,data,axis_title_x,axis_title_y,...)
{
  #browser()
  if(axis_title_x==TRUE & axis_title_y==TRUE )
  {
    plot_new <-  plot+theme(plot.title = element_text(hjust=0.5,size=20,face="bold"),
               axis.text.x = element_text(size=18,hjust=1,...),
               axis.text.y = element_text(size=18,hjust=1,...),
               axis.title.x =element_text(size=18,...),
               axis.title.y = element_text(size=18,...))

  }

  if(axis_title_x==FALSE & axis_title_y==TRUE )
  {
    plot_new <-  plot+theme(plot.title = element_text(hjust=0.5,size=20,face="bold"),
               axis.text.x = element_text(size=18,hjust=1,...),
               axis.text.y = element_text(size=18,hjust=1,...),
               axis.title.x =element_blank(),
               axis.title.y = element_text(size=18,...))
  }

  if(axis_title_x==TRUE & axis_title_y==FALSE )
  {
    plot_new <-  plot+theme(plot.title = element_text(hjust=0.5,size=20,face="bold"),
               axis.text.x = element_text(size=18,hjust=1,...),
               axis.text.y = element_text(size=18,hjust=1,...),
               axis.title.y =element_blank(),
               axis.title.x = element_text(size=18,...))
  }

  if(axis_title_x==FALSE & axis_title_y==FALSE )
  {
   plot_new <- plot+theme(plot.title = element_text(hjust=0.5,size=20,face="bold"),
               axis.text.x = element_text(size=18,hjust=1,...),
               axis.text.y = element_text(size=18,hjust=1,...),
               axis.title.x =element_blank(),
               axis.title.y = element_blank())
  }
  return(plot_new)
}
0
DS_UNI 21 Июн 2018 в 14:03