Генерация HTML-кода для сгенерированных графиков в R
Как сгенерировать HTML-код и назначить его переменной в R без сохранения в HTML-файле? (т.е.)
функция должна быть как
p <- pairs(data)
res <- htmlcodefunction(p)
res
вывод должен быть HTML-кодом, а не файлом
1 ответ
Вы не можете напрямую кодировать изображения как HTML. Когда вы видите изображение в HTML, это обычно делается через ссылку на файл изображения на сервере. Однако есть способы обойти это.
Если вы хотите, чтобы данные изображения сохранялись как символы в файле HTML, вы можете использовать base64 для кодирования растрового изображения или в случае векторной графики (например, графиков R) вы можете кодировать как SVG, что, вероятно, вы имеете в виду сохраняя изображение как HTML.
Обратите внимание, что в вашем примере кода вы на самом деле ничего не храните в p
потому что хотя pairs
будет рисовать график, он не возвращает объект, поэтому функции не с чем делать что-либо.
В любом случае, вот небольшая функция, которая примет функцию построения графика в качестве аргумента и вернет строку svg, которую можно использовать в HTML:
as_svg <- function(my_plot, ...)
{
my_plot <- as.call(substitute(my_plot))
loc <- tempfile()
svg(loc, ...)
eval(my_plot)
dev.off()
readChar(loc, 1e6L)
}
Вы можете использовать это так:
as_svg(plot(rnorm(10), rnorm(10)))
#> [1] "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg xmlns=\"http://www.w3.org/2000/svg\"
#> xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"504pt\" height=\"504pt\" viewBox=\"0
#> 0 504 504\" version=\"1.1\">\n<defs>\n<g>\n<symbol overflow=\"visible\" id=\"glyph0-0\">
#> \n<path style=\"stroke:none;\" d=\"M 1.5 0 L 1.5 -7.5 L 7.5 -7.5 L 7.5 0 Z M 1.6875 -0.1875 L
#> 7.3125 -0.1875 L 7.3125 -7.3125 L 1.6875 -7.3125 Z M 1.6875 -0.1875 \"/>\n</symbol>\n<symbol
#> overflow=\"visible\" id=\"glyph0-1\">\n<path style=\"stroke:none;\" d=\"M 0.382813 -2.578125 L
#> 0.382813 -3.640625 L 3.621094 -3.640625 L 3.621094 -2.578125 Z M 0.382813 -2.578125 \"/>\n
#> </symbol>\n<symbol overflow=\"visible\" id=\"glyph0-2\">\n<path style=\"stroke:none;\"
#> d=\"M 6.039063 -1.015625 L 6.039063 0 L 0.363281 0 C 0.355469 -0.253906 0.394531 -0.496094
#> 0.484375 -0.734375 C 0.628906 -1.117188 0.859375 -1.5 1.179688 -1.875 C 1.492188 -2.25
#> 1.953125 -2.683594 2.5625 -3.175781 C 3.492188 -3.941406 4.125 -4.546875 4.453125 -4.992188 C
#> ... <truncated>