“No more than six words on a slide. EVER”

Seth Godin

Graf iz R v Power Point

Za prenos grafa iz R v PP je kar nekaj metod:

Najenostavneje je kopirati iz RSTUDIO preko odložišča.
- Lahko shraniš z ggsave() in potem uvoziš kot sliko v PP (lahko tudi kot povezavo).
- Lahko uporabiš metode iz knjižnice oficcer.

Zadnja metoda se mi zdi najbolj uporabna, ko moraš prenesti večje število grafov, katerih število je na začetku nepoznano, kot na primer iz kakšne for zanke.

library(ggplot2)
library(magrittr)

library(officer)


# Uporabiš lahko prazno podlogo ali pa že obstoječo
moja_podloga <- officer:: read_pptx() 
#moja_podloga <- officer::read_pptx("./lib/podloga.pptx")

# s tem stavkom pogledaš, kaj je v podlogi, ker boš potreboval v stavku add_slide()
#layout_summary(moja_podloga)

for(i in seq(1:3)){
  set.seed(i)
  df <- data.frame(x=seq(1,100), y=rnorm(n=100)) #100 naključnih števil
  p1 <- ggplot(data=df, aes(x=x,y=y, group=1)) + theme_minimal() +
          geom_line() +  ggtitle(paste("GRAF",i))
  
  moja_podloga <- moja_podloga %>% 
      add_slide(layout = "Blank", master = "Office Theme")

  moja_podloga <- moja_podloga %>% 
      ph_with(value = p1, location = ph_location_fullsize())
  
  print(p1) #prikaže vse grafe, drugače v for stavku tega ne prikaže
}

#Shrani (tukaj sem zakomentiral)
#print(moja_podloga, target = "Grafi.pptx") #shranim v datoteko vse grafe.

Graf iz Python v Power Point

Podobno kot s paketom officer v R je v Python paket python-pptx. Mogoče ne tako elegantno, pa vseeno.

Vzorci se nahajajo TUKAJ.

Še ena zanimivost, kako ni potrebno shraniti je TUKAJ

Nekaj podobnega, kot je bilo v R je sedaj tukaj:



    import numpy as np
    import pandas as pd
    
    from io import BytesIO
    from pptx import Presentation
    
    prs = Presentation()
    
    for i in range(1,4):
        np.random.seed(i)
        df = pd.DataFrame({"x": range(1,101)})
        df['y'] = np.random.randn(100)
    
        p1 = df.plot(x='x', y='y', kind = 'line').get_figure()
        image_stream = BytesIO() # To z BytesIO je, da ne rabim shraniti slike na disk.
        p1.savefig(image_stream, format='PNG')
        
        slide = prs.slides.add_slide(prs.slide_layouts[6]) #Layout 6 je pri meni prazen layout.
        pic = slide.shapes.add_picture(image_stream, left=1, top=1)
    
    
    prs.save('Test.ppt')