Metrum Minutes

Latest Posts »

ggedit RStudio::conf 2017 Presentation

On January 15 the updated version of ggedit was presented in RStudio::conf.

Highlights of the updated version.

  • verbose script handling during updating in the gagdet (see video below)
  • verbose script output for updated layers and theme to parse and evaluate in console or editor
  • output for scale objects eg scale*grandientn and scale*manual
  • verbose script output for scales eg scale*grandientn and scale*manual to parse and evaluate in console or editor
  • input plot objects can have the data in the layer object and in the base object.
    • ggplot(data=iris,aes(x=Sepal.Width,y=Sepal.Length,colour=Species))+geom_point()
    • ggplot(data=iris,aes(x=Sepal.Width,y=Sepal.Length))+geom_point(aes(colour=Species))
    • ggplot()+geom_point(data=iris,aes(x=Sepal.Width,y=Sepal.Length,colour=Species))
  • Visualizing theme objects in single output
  • Visual Comparison of two themes objects in single output

Presentation from the conference

#devtools::install_github("metrumresearchgroup/ggedit",subdir="ggedit")
rm(list=ls())
library(ggedit)
#?ggedit

p0=list(
  Scatter=iris%>%ggplot(aes(x =Sepal.Length,y=Sepal.Width))+
    geom_point(aes(colour=Species),size=6),
  
  ScatterFacet=iris%>%ggplot(aes(x =Sepal.Length,y=Sepal.Width))+
    geom_point(aes(colour=Species),size=6)+
      geom_line(linetype=2)+
    facet_wrap(~Species,scales='free')+
    labs(title='Some Title')
  )

#a=ggedit(p.in = p0,verbose = T) #run ggedit
dat_url <- paste0("https://raw.githubusercontent.com/metrumresearchgroup/ggedit/master/RstudioExampleObj.rda")
load(url(dat_url)) #pre-run example

ldply(a,names)
##                     .id      V1           V2
## 1          UpdatedPlots Scatter ScatterFacet
## 2         UpdatedLayers Scatter ScatterFacet
## 3 UpdatedLayersElements Scatter ScatterFacet
## 4     UpdatedLayerCalls Scatter ScatterFacet
## 5         updatedScales Scatter ScatterFacet
## 6    UpdatedScalesCalls Scatter ScatterFacet
## 7         UpdatedThemes Scatter ScatterFacet
## 8     UpdatedThemeCalls Scatter ScatterFacet
plot(a)

comparePlots=c(p0,a$UpdatedPlots)
names(comparePlots)[c(3:4)]=paste0(names(comparePlots)[c(3:4)],"Updated")

Initial Comparison Plot

plot(as.ggedit(comparePlots))

Apply updated theme of first plot to second plot

comparePlots$ScatterFacetNewTheme=p0$ScatterFacet+a$UpdatedThemes$Scatter

plot(as.ggedit(comparePlots[c("ScatterFacet","ScatterFacetNewTheme")]),
      plot.layout = list(list(rows=1,cols=1),list(rows=2,cols=1))
     )

#Using Remove and Replace Function ##Overlay two layers of same geom

(comparePlots$ScatterMistake=p0$Scatter+a$UpdatedLayers$ScatterFacet[[1]])

Remove

(comparePlots$ScatterNoLayer=p0$Scatter%>%
  rgg(oldGeom = 'point'))

Replace Geom_Point layer on Scatter Plot

(comparePlots$ScatterNewLayer=p0$Scatter%>%
  rgg(oldGeom = 'point',
      oldGeomIdx = 1,
      newLayer = a$UpdatedLayers$ScatterFacet[[1]]))

Remove and Replace Geom_Point layer and add the new theme

(comparePlots$ScatterNewLayerTheme=p0$Scatter%>%
  rgg(oldGeom = 'point',
      newLayer = a$UpdatedLayers$ScatterFacet[[1]])+
  a$UpdatedThemes$Scatter)

Cloning Layers

A geom_point layer

(l=p0$Scatter$layers[[1]])
## mapping: colour = Species 
## geom_point: na.rm = FALSE
## stat_identity: na.rm = FALSE
## position_identity

Clone the layer

(l1=cloneLayer(l))
## mapping: colour = Species 
## geom_point: na.rm = FALSE
## stat_identity: na.rm = FALSE
## position_identity

Test that all is equal

all.equal(l,l1)
## [1] TRUE

Verbose copy of layer

(l1.txt=cloneLayer(l,verbose = T))
## [1] "geom_point(mapping=aes(colour=Species),na.rm=FALSE,size=6,data=NULL,position=\"identity\",stat=\"identity\",show.legend=NA,inherit.aes=TRUE)"

Parse the text

(l2=eval(parse(text=l1.txt)))
## mapping: colour = Species 
## geom_point: na.rm = FALSE
## stat_identity: na.rm = FALSE
## position_identity

Test that all is equal

all.equal(l,l2)
## [1] TRUE

Back to our example

  #Original geom_point layer
  parse(text=cloneLayer(p0$ScatterFacet$layers[[1]],verbose = T))
## expression(geom_point(mapping = aes(colour = Species), na.rm = FALSE, 
##     size = 6, data = NULL, position = "identity", stat = "identity", 
##     show.legend = NA, inherit.aes = TRUE))
  #new Layer
  parse(text=a$UpdatedLayerCalls$ScatterFacet[[1]])
## expression(geom_point(mapping = aes(colour = Species), na.rm = FALSE, 
##     size = 3, shape = 22, fill = "#BD2020", alpha = 1, stroke = 0.5, 
##     data = NULL, position = "identity", stat = "identity", show.legend = NA, 
##     inherit.aes = TRUE))

Visualize Themes

pTheme=list()
(pTheme$Base=plot(a$UpdatedThemes$Scatter))

Visualize Part of Themes

(pTheme$Select=plot(a$UpdatedThemes$Scatter,themePart = c('plot','legend'),fnt = 18))

Visually Compare Theme

(pTheme$Compare=plot(obj=a$UpdatedThemes$Scatter,obj2 = ggplot2:::theme_get()))


Jonathan Sidi joined Metrum Research Group in 2016 after working for several years on problems in applied statistics, financial stress testing and economic forecasting in both industrial and academic settings.

To learn more about additional open-source software packages developed by Metrum Research Group please visit the Metrum website or visit us on github.

Contact: For questions and comments, feel free to email me at: yonis@metrumrg.com or open an issue in github.


© 2016 Metrum Research Group LLC