2017-10-16 55 views
0

當我試圖通過Jupyter運行此:錯誤: 「HTML控件不能以純文本格式表示的」

library(leaflet) 

m <- leaflet() %>% 
    addTiles() %>% # Add default OpenStreetMap map tiles 
    addMarkers(lng=174.768, lat=-36.852, popup="The birthplace of R") 
m # Print the map 

我得到這個錯誤:

HTML widgets cannot be represented in plain text (need html)

至於建議here我曾嘗試:

library(plotly) 
embed_notebook(m) 

,但我得到:

Error in UseMethod("embed_notebook"): no applicable method for 'embed_notebook' applied to an object of class "c('leaflet', 'htmlwidget')

我怎麼能畫出這樣的圖呢?

回答

1

embed_notebook是專爲plotly對象定義的。我會查看文檔以查看傳單是否具有自己的等效功能。

或者,由於它是一個html小部件,因此可以將其另存爲html文件,然後將該文件嵌入筆記本中的iframe中。這可以用類似

library(IRdisplay) 
htmlwidgets::saveWidget(m, "m.html") 
display_html('<iframe src="m.html" width=100% height=450></iframe>') 

來完成。如果你不想讓一堆的HTML文件的文件夾中,也可以輸入你的widget的原始HTML到您的iframe然後用

刪除
rawHTML = base64enc::dataURI(mime = "text/html;charset=utf-8", file = "m.html") 
display_html(paste("<iframe src=", rawHTML, "width=100% height=450></iframe>", sep = "\"")) 
unlink("m.html") 

但我發現這會在最新版本的Chrome中產生錯誤。

如果有幫助,我拼湊下面的函數從embed_notebook的源代碼

embed = function(x, height) { 
    library(IRdisplay) 
    tmp = tempfile(fileext = ".html") 
    htmlwidgets::saveWidget(x, tmp) 
    rawHTML = base64enc::dataURI(mime = "text/html;charset=utf-8", file = tmp) 
    display_html(paste("<iframe src=", rawHTML, "width=100% height=", height, "id=","igraph", "scrolling=","no","seamless=","seamless", "frameBorder=","0"></iframe>", sep = "\"")) 
    unlink(tmp) 
} 

但同樣,這可能不爲Chrome工作。

+1

#cromulent問題是'htmlwidgets :: saveWidget(m,「m.html」)'doesen't創建html文件。 – Simone

+0

@Simone如果這是侮辱,我很抱歉,但是您的R版本中是否安裝了htmlwidgets軟件包?如果你這樣做,我還沒有足夠的經驗去了解可能導致問題的原因。 – cromulent

+0

是的,我已經安裝了'htmlwidgets'軟件包 – Simone