如何让 XPlot 在 Linux / Mono 上工作?
How do I make XPlot work on Linux / Mono?
我在 Linux 上使用 F# 的图表库 XPlot 时遇到问题。例如,当我使用 "fsharpi"-命令 运行 烛台图表的标准示例脚本时,脚本本身 运行s 没有任何抱怨,但没有打开浏览器,也没有显示任何内容.
示例脚本:
#load "../packages/FsLab/FsLab.fsx"
open XPlot.GoogleCharts
let data =
[
"Mon", 20, 28, 38, 45
"Tue", 31, 38, 55, 66
"Wed", 50, 55, 77, 80
"Thu", 77, 77, 66, 50
"Fri", 68, 66, 22, 15
]
Chart.Candlestick data
如果我 运行 通过:
fsharpi "test.fsx"
没有任何反应,一段时间后只出现另一行命令提示符,但也没有发生错误。 如果我 运行 通过:
fsharpi
#load "test.fsx";;
显示以下输出:
[Loading /home/flo/Copy/Mono/FSharp/FinalHashtagVisualizer/packages/FsLab/Shared/Server.fsx
Loading /home/flo/Copy/Mono/FSharp/FinalHashtagVisualizer/packages/FsLab/Shared/Styles.fsx
Loading /home/flo/Copy/Mono/FSharp/FinalHashtagVisualizer/packages/FsLab/Text/FsLab.fsx
Loading /home/flo/Copy/Mono/FSharp/FinalHashtagVisualizer/packages/FsLab/FsLab.fsx
Loading /home/flo/Copy/Mono/FSharp/FinalHashtagVisualizer/HashtagVisualizer/test.fsx]
namespace FSI_0003.FsLab.Formatters
type SimpleServer =
class
new : unit -> SimpleServer
member AddPage : page:string -> string
member
AddPart : part:(Suave.Http.HttpContext ->
Async<Suave.Http.HttpContext option>) -> string
member Port : Suave.Sockets.Port
end
val instance : System.Lazy<SimpleServer>
namespace FSI_0003.FsLab.Formatters
val private defaultStyles :
System.Collections.Generic.IDictionary<string,string>
namespace FSI_0003.FsLab.Formatters
val private displayHtml : html:string -> unit
namespace FSI_0003.FSharp.Charting
type Chart with
static member
Line : data:Deedle.Series<'K,#FSharp.Charting.value> * ?Name:string *
?Title:string * ?Labels:#seq<string> *
?Color:System.Drawing.Color * ?XTitle:string * ?YTitle:string ->
FSharp.Charting.ChartTypes.GenericChart
when 'K : equality and 'K :> FSharp.Charting.key
type Chart with
static member
Column : data:Deedle.Series<'K,#FSharp.Charting.value> * ?Name:string *
?Title:string * ?Labels:#seq<string> *
?Color:System.Drawing.Color * ?XTitle:string * ?YTitle:string ->
FSharp.Charting.ChartTypes.GenericChart
when 'K : equality and 'K :> FSharp.Charting.key
type Chart with
static member
Pie : data:Deedle.Series<'K,#FSharp.Charting.value> * ?Name:string *
?Title:string * ?Labels:#seq<string> * ?Color:System.Drawing.Color *
?XTitle:string * ?YTitle:string ->
FSharp.Charting.ChartTypes.PieChart
when 'K : equality and 'K :> FSharp.Charting.key
type Chart with
static member
Area : data:Deedle.Series<'K,#FSharp.Charting.value> * ?Name:string *
?Title:string * ?Labels:#seq<string> *
?Color:System.Drawing.Color * ?XTitle:string * ?YTitle:string ->
FSharp.Charting.ChartTypes.GenericChart
when 'K : equality and 'K :> FSharp.Charting.key
type Chart with
static member
Bar : data:Deedle.Series<'K,#FSharp.Charting.value> * ?Name:string *
?Title:string * ?Labels:#seq<string> * ?Color:System.Drawing.Color *
?XTitle:string * ?YTitle:string ->
FSharp.Charting.ChartTypes.GenericChart
when 'K : equality and 'K :> FSharp.Charting.key
namespace FSI_0003.MathNet.Numerics.LinearAlgebra
val inline toFrame :
matrix:MathNet.Numerics.LinearAlgebra.Matrix<'a> -> Deedle.Frame<int,int>
when 'a : (new : unit -> 'a) and 'a : struct and
'a :> System.IEquatable<'a> and 'a :> System.IFormattable and
'a :> System.ValueType
val inline ofFrame :
frame:Deedle.Frame<'a,'b> -> MathNet.Numerics.LinearAlgebra.Matrix<float>
when 'a : equality and 'b : equality
val inline ofFrame :
frame:Deedle.Frame<'a,'b> -> MathNet.Numerics.LinearAlgebra.Matrix<float>
when 'a : equality and 'b : equality
val inline toSeries :
vector:MathNet.Numerics.LinearAlgebra.Vector<'a> -> Deedle.Series<int,'a>
when 'a : (new : unit -> 'a) and 'a : struct and
'a :> System.IEquatable<'a> and 'a :> System.IFormattable and
'a :> System.ValueType
val inline ofSeries :
series:Deedle.Series<'a, ^b> ->
MathNet.Numerics.LinearAlgebra.Vector<float>
when 'a : equality and ^b : (static member op_Explicit : ^b -> float)
val inline ofSeries :
series:Deedle.Series<'a, ^b> ->
MathNet.Numerics.LinearAlgebra.Vector<float>
when 'a : equality and ^b : (static member op_Explicit : ^b -> float)
namespace FSI_0003.Deedle
val inline ofMatrix :
matrix:MathNet.Numerics.LinearAlgebra.Matrix<'a> -> Deedle.Frame<int,int>
when 'a : (new : unit -> 'a) and 'a : struct and
'a :> System.IEquatable<'a> and 'a :> System.IFormattable and
'a :> System.ValueType
val inline toMatrix :
frame:Deedle.Frame<'a,'b> -> MathNet.Numerics.LinearAlgebra.Matrix<float>
when 'a : equality and 'b : equality
val ofCsvRows :
data:FSharp.Data.Runtime.CsvFile<'T> -> Deedle.Frame<int,string>
val inline ofVector :
vector:MathNet.Numerics.LinearAlgebra.Vector<'a> -> Deedle.Series<int,'a>
when 'a : (new : unit -> 'a) and 'a : struct and
'a :> System.IEquatable<'a> and 'a :> System.IFormattable and
'a :> System.ValueType
val inline toVector :
series:Deedle.Series<'a, ^b> ->
MathNet.Numerics.LinearAlgebra.Vector<float>
when 'a : equality and ^b : (static member op_Explicit : ^b -> float)
namespace FSI_0003
val data : (string * int * int * int * int) list
我使用 VS Code 和 Ionide-Extension。我通过 Fake 安装了 FsLab-Package,并且通常运行良好(图表除外)。我通过 VS 代码中的 "new project" 命令创建了项目,但我没有找到一种方法也可以通过 VS 代码命令 运行 它,而是使用(集成)控制台。我尝试使用 NetCore 而不是 Mono,但也没有找到让它工作的方法。 我用的F#Interactive版本是4.1,据我所知是最新的
我希望我的问题现在足够具体,可以满足社区准则。
正如评论中指出的那样,您必须将图表传输到 Chart.Show。因此,以下脚本应按预期工作:
#load "../packages/FsLab/FsLab.fsx"
open XPlot.GoogleCharts
let data =
[
"Mon", 20, 28, 38, 45
"Tue", 31, 38, 55, 66
"Wed", 50, 55, 77, 80
"Thu", 77, 77, 66, 50
"Fri", 68, 66, 22, 15
]
Chart.Candlestick data |> Chart.Show