【问题标题】:Convert html output to image将html输出转换为图像
【发布时间】:2017-12-31 01:49:02
【问题描述】:

我正在使用 R 格式化包来呈现一些数据帧,但输出是 html(运行脚本后它会打开浏览器)。

问题是我正在尝试在接受 R 脚本但需要输出为图像(如 ggplot)而不是 html 的 PowerBI 下呈现这些表。但我不知道我该怎么做。

我研究了 R2HTML 和 htmlwidgets 包,但我仍然没有找到解决方案。 (我可能犯了一些错误)。

这是我正在使用的虚拟代码:

library(formattable)
DF <- data.frame(Ticker=c("", "", "", "IBM", "AAPL", "MSFT"),
             Name=c("Dow Jones", "S&P 500", "Technology", 
                    "IBM", "Apple", "Microsoft"),
             Value=accounting(c(15988.08, 1880.33, NA, 
                                130.00, 97.05, 50.99)),
             Change=percent(c(-0.0239, -0.0216, 0.021, 
                              -0.0219, -0.0248, -0.0399)))
DF
##   Ticker       Name     Value Change
## 1         Dow Jones 15,988.08 -2.39%
## 2           S&P 500  1,880.33 -2.16%
## 3        Technology        NA  2.10%
## 4    IBM        IBM    130.00 -2.19%
## 5   AAPL      Apple     97.05 -2.48%
## 6   MSFT  Microsoft     50.99 -3.99%
formattable(DF, list(
  Name=formatter(
"span",
style = x ~ ifelse(x == "Technology", 
                   style(font.weight = "bold"), NA)),
  Value = color_tile("white", "orange")
 Change = formatter(
"span",
style = x ~ style(color = ifelse(x < 0 , "red", "green")),
x ~ icontext(ifelse(x < 0, "arrow-down", "arrow-up"), x))))

【问题讨论】:

  • 所以您想将表格提取为图像而不是 html 文件吗?
  • 是的,这就是我想要的
  • 为什么不直接向 powerbi 提供数据,然后在内部进行操作?
  • 嗯,问题是我在 R 中进行一些高级数据处理,比如制作交叉表,但是数据框单元格内的文本列表而不是只有 1 个元素(默认情况下在 powerBI 中你只是一个单元格中有 1 个元素,并且表格的单元格中不能有多个元素)。所以我试图在 R 上呈现它并使用脚本来显示我在 Power BI 上的报告结果
  • formattable() 调用在语法上不正确。你错过了,

标签: html r image output


【解决方案1】:
formattable(DF, list(
  Name = formatter(
    "span", style = x ~ ifelse(x == "Technology",  style(font.weight = "bold"), NA)
  ),
  Value = color_tile("white", "orange"),
  Change = formatter(
    "span", style = x ~ style(color = ifelse(x < 0 , "red", "green")),
    x ~ icontext(ifelse(x < 0, "arrow-down", "arrow-up"), x)))
) -> w

htmlwidgets::saveWidget(as.htmlwidget(w), "/some/dir/table.html", selfcontained = TRUE)

webshot::webshot(url = "/some/dir/table.html", file = "/some/dir/table.png", 
                 vwidth = 1000, vheight = 275)

宽度/高度不一定会与指定的一样精确,您需要对其进行一些手动猜测(或加载 magick 并查看是否可以使用它进行自动剪辑)。

这依赖于phantomjs,您可能无法让您的 IT 和/或安全小组启用它。

【讨论】:

  • 我没有管理员权限,所以我认为我不能这样做,但无论如何感谢您的回答。我会看看我能用 IT 组做什么。
猜你喜欢
  • 1970-01-01
  • 2020-01-03
  • 2011-06-02
  • 2010-10-14
  • 1970-01-01
  • 2020-11-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多