2016-10-23 18 views
5

Próbuję użyć "sprytnie" pakiet R do wykreślenia obrazu w grafice R.R sprytnie dodać obraz w tle

raz pierwszy starał się to obraz z komputera lokalnego:

library(plotly) 

outfile <- tempfile(fileext = ".png") 

png(outfile) 
plot(rnorm(200), rnorm(200)) 
dev.off() 

plot_ly(x = c(1, 2, 3), y = c(1, 2, 3)) %>% 
    layout(
    images = list(
     list(
     source = outfile, 
     xref = "x", 
     yref = "y", 
     x = 1, 
     y = 1, 
     sizex = 2, 
     sizey = 2, 
     sizing = "stretch", 
     opacity = 0.4, 
     layer = "below" 
    ) 


    ) 
) 

Ale nie udało mi się to zrobić. Wtedy pomyślałem, że to dlatego, że sprytnie wymaga obrazu http lub https.

Pierwsze pytanie: czy można zaimportować obraz z lokalnego pliku (podobno jest to możliwe w pythonie: https://plot.ly/python/images/)?

Ponieważ nie można osadzić obrazu lokalnego, próbuję zaimportować obraz, który przesłałem na moim Githubie. Ale wydaje się też nie działać:

library(plotly) 

plot_ly(x = c(1, 2, 3), y = c(1, 2, 3)) %>% 
    layout(
    images = list(
     list(
     source = "https://github.com/charlottesirot/elementR/blob/master/inst/www/2.png", 
     xref = "x", 
     yref = "y", 
     x = 1, 
     y = 1, 
     sizex = 2, 
     sizey = 2, 
     sizing = "stretch", 
     opacity = 0.4, 
     layer = "below" 
    ) 


    ) 
) 

Na czym polega problem?

Szukałem wszędzie, zamieszczałem pytania na sprytnym forum (http://community.plot.ly/t/import-a-local-image-in-plot/2476, http://community.plot.ly/t/add-a-background-image/2457), ale nie znalazłem odpowiedzi.

Masz jakiś pomysł?

+0

Czy widzisz ten https://plot.ly/~as5165/12/#code. Nie R, ale może pomóc. Obraz jest base64. Daj nam znać, jak sobie radzisz – pssguy

Odpowiedz

1

Dwie małe rzeczy, które musiały zostać zmienione.

  • URL wskazał na coś, co wyglądało jak zdjęcie, ale faktycznie pokazuje całą stronę GitHub, dołączając ?raw=true zapewnia, że ​​tylko obraz zostanie pokazany
  • Po załadowaniu obrazu współrzędne były na zewnątrz działki

Zapisanie tego kodu przez htmlwidget nadal nie powoduje wyświetlenia obrazu z powodu jakiegoś problemu z numerem CORS. W drugim fragmencie obraz jest kodowany i dodawany do wykresu. Nie wyświetla się w RStudio, ale w wyjściu HTML.

Poniższy kod generuje następujący wykres.

enter image description here

library('plotly') 

plot_ly(x = c(1, 2, 3), y = c(1, 2, 3), type = 'scatter', mode = 'markers') %>% 
    layout(
    images = list(
     list(
     source = "https://github.com/charlottesirot/elementR/blob/master/inst/www/2.png?raw=true", 
     xref = "x", 
     yref = "y", 
     x = 1, 
     y = 3, 
     sizex = 2, 
     sizey = 2, 
     sizing = "stretch", 
     opacity = 0.4, 
     layer = "below" 
    ) 
    ) 
) 

Fragment o base64 kodowanych obrazu.

library('plotly') 
library('htmlwidgets') 
library('RCurl') 

image_file <- "/temp/2.png" 
txt <- RCurl::base64Encode(readBin(image_file, "raw", file.info(image_file)[1, "size"]), "txt") 


p <- plot_ly(x = c(1, 2, 3), y = c(1, 2, 3), type = 'scatter', mode = 'markers') %>% 
    layout(
    images = list(
     list(
     source = paste('data:image/png;base64', txt, sep=','), 
     xref = "x", 
     yref = "y", 
     x = 1, 
     y = 3, 
     sizex = 2, 
     sizey = 2, 
     sizing = "stretch", 
     opacity = 0.4, 
     layer = "below" 
    ) 
    ) 
) 
p 
htmlwidgets::saveWidget(p, "/tmp/plot.html")