2016-10-23 4 views
5

Я пытаюсь использовать "plotly" R-пакет для построения изображения на графике R.R замысловатый добавить изображение в фоновом режиме

я первый попытался включить изображение с локального компьютера:

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" 
    ) 


    ) 
) 

Но мне не удалось сделать это. Затем я подумал, что это связано с тем, что для построения сюжета, по-видимому, требуется http или https-образ.

Первый вопрос: возможно ли импортировать изображение из локального файла (видимо, это возможно с помощью python: https://plot.ly/python/images/)?

Как кажется, невозможно встроить локальное изображение, я пытаюсь импортировать изображение, которое я загрузил на своем Github. Но похоже не работает:

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" 
    ) 


    ) 
) 

В чем проблема?

Я искал всюду, размещал вопросы на форуме сюжета (http://community.plot.ly/t/import-a-local-image-in-plot/2476, http://community.plot.ly/t/add-a-background-image/2457), но я не нашел своих ответов.

У вас есть идея?

+0

Вы видите этот https://plot.ly/~as5165/12/#code. Не R, но может помочь. Изображение - base64. Сообщите нам, как вы поживаете – pssguy

ответ

1

Две мелочи, которые необходимо было изменить.

  • URL-адрес указывает на что-то, похожий на изображение, но на самом деле показывает всю страницу GitHub, добавив ?raw=true убеждается, что только изображение будет показано
  • После загрузки изображения координаты были вне участка

Сохранение этого кода с помощью htmlwidget по-прежнему не отображает изображение из-за ошибки CORS. Во втором фрагменте изображение base64 закодировано и добавлено к сюжету. Он не отображается в RStudio, а на выходе HTML.

В нижеследующем коде представлен следующий график.

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" 
    ) 
    ) 
) 

Сниппает для base64 кодированных изображений.

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")