在F#互动中运行时,我希望下面的代码创建一个简单的饼图并将其保存到磁盘中:
let pie = FSharpChart.Pie([("Apples",1);("Oranges",2);("Bananas",3)])
FSharpChart.SaveAs "test.png" ChartImageFormat.Png pie然而,实际保存在"test.png“中的是一个空白图像。如果我将图表输送到FShartChart.SaveAs函数中,也会发生同样的情况。但是,如果我首先只执行图表创建代码,并在手动执行SaveAs之前给出图表呈现的时间,则图像将按预期的方式保存。
有没有一种方法可以阻止对FSharpChart.Pie的调用,直到呈现完成?我在Visual 2013中使用的是FSharpChart.fsx版本0.60。
发布于 2013-10-29 04:33:11
问题是,在将图表保存到文件之前,首先需要显示底层图表控件(这非常愚蠢,但遗憾的是,F#图表只是底层.NET图表库的轻量级包装器)。
我认为您可以在F#交互式中分别运行这两行,或者需要显式调用一些显示图表的方法(我相信有FSharpChart.Show或类似的东西)
我使用F# Charting (它是库的更新版本(有一些API更改,但有非常相似的想法)和以下工作(即使是在一个命令中全部执行)来测试这一点:
#load @"packages\FSharp.Charting.0.87\FSharp.Charting.fsx"
open FSharp.Charting
let pie = Chart.Pie([("Apples",1);("Oranges",2);("Bananas",3)])
pie.ShowChart()
pie.SaveChartAs("D:\\temp\\test.png", ChartTypes.ChartImageFormat.Png)发布于 2017-05-25 15:35:51
我发现下面的工作很好,不需要显示。(FSharp.Charting,v0.90.14,.net 4.5)
open FSharp.Charting
// etc
let prices = getPriceData ()
let chart = Chart.Candlestick(prices)
Chart.Save @"C:\Charts\prices.png" chart更新
let renderChart ch =
let frm = new Form(Visible = false, TopMost = true, Width = 700, Height = 500)
let ctl = new ChartControl(ch, Dock = DockStyle.Fill)
frm.Controls.Add(ctl)在给定图表上调用此选项将允许您在没有任何窗体弹出的情况下呈现图表。
https://stackoverflow.com/questions/19649525
复制相似问题