6

F# Interactive で実行すると、次のコードで単純な円グラフが作成され、ディスクに保存されると思います。

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 Studio 2013 で FSharpChart.fsx バージョン 0.60 を使用しています。

4

2 に答える 2

8

問題は、チャートをファイルに保存する前に、下層のチャート コントロールを最初に表示する必要があることです (これは非常にばかげていますが、悲しいことに、F# チャートは下層の .NET チャート ライブラリに対する軽量のラッパーにすぎません)。

F#インタラクティブで2行を別々に実行するか、チャートを表示するメソッドを明示的に呼び出す必要があると思います(あると思います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)
于 2013-10-29T04:33:11.883 に答える