FsLab/f#格式化可以处理来自第三方库的任意R可视化吗?
我一直试图包含一个图表,但没有成功。
我可以得到一个(非常)简单的图表从fsi中弹出通过计算这个:
#load "packages/FsLab/Themes/DefaultWhite.fsx"
#load "packages/FsLab/FsLab.fsx"
open Deedle
open FSharp.Data
open RProvider
open RProvider.graphics
open RProvider.igraph
let grpa = R.graph__from__literal("A--B, B-c")
let pl = R.plot_igraph(grpa)
但是如果我想用
将它包含在日志中(*** include-value:pl ***)
我只是得到了输出RDotNet.SymbolicExpression
。
我错过了什么吗?
(弹出图形本身也不太正确,但我想这是一个不同的问题!)
FsLab模板在这方面有点不可靠,所以我决定暂时删除曾经存在的部分支持(让它恢复是很好的,但它应该正常工作:-))。
我的建议是编写一个辅助函数,将R输出捕获到图像中,然后返回图像。我没有安装R来测试这个,但是沿着这些行应该至少适用于R.plot
:
let capture f =
let file = Path.GetTempFileName() + ".png"
R.png(file) |> ignore
let res = f()
R.dev_off()
let img = Image.FromStream(new MemoryStream(File.ReadAllBytes file))
File.Delete(file)
res, img
那么你就可以使用:
创建图表let pl, img = capture(fun () ->
R.plot(...) )
对于使用igraph
-我不确定,但关于如何将igraph
输出保存到文件的教程应该有所帮助。我注意到的一件事是,你有时需要调用R.show
来获得渲染的东西,所以也许尝试:
let _, img = capture(fun () ->
R.plot_igraph grpa |> R.show )
(*** include-value:img ***)