1

FsLab/f# 格式可以处理来自 3rd 方库的任意 R 可视化吗?

我一直试图包含一个igraph图表但没有成功。

通过评估以下内容,我可以从 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包括在内。

我在这里错过了什么吗?

(弹出图本身也看起来不太正确,但我想这是一个不同的问题!)

4

1 回答 1

2

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 ***)
于 2016-09-30T01:33:21.877 回答