この例では、 Diagrams バックエンド(両方とも Stackage から) を使用してChartをテストしようとしています
import Graphics.Rendering.Chart.Easy
import Graphics.Rendering.Chart.Backend.Diagrams
signal :: [Double] -> [(Double,Double)]
signal xs = [ (x,(sin (x*3.14159/45) + 1) / 2 * (sin (x*3.14159/5))) | x <- xs ]
test :: IO ()
test = toFile def "example1_big.png" $ do
layout_title .= "Amplitude Modulation"
setColors [opaque blue, opaque red]
plot (line "am" [signal [0,(0.5)..400]])
plot (points "am points" (signal [0,7..400]))
wikiのexample-1から。
ファイルMain.hs
内
main :: IO ()
main = test
プロジェクトはエラーなしでビルドおよび実行され、実際example1_big.png
にプロジェクト ディレクトリにファイルが生成されます。feh
しかし、または他の画像ビューアを使用して開くことができません。
これはfeh
言うことです。
$ feh example1_big.png
feh WARNING: example1_big.png - No Imlib2 loader for that file format
feh: No loadable images specified.
See 'feh --help' or 'man feh' for detailed usage information
それを使用mediainfo
すると、適切なフォーマット情報がないことが示されます。
$ mediainfo example1_big.png
General
Complete name : example1_big.png
File size : 149 KiB
周りを見回すと、このスレッドが見つかりました。基本的に、デフォルトを使用するFileOptions
代わりに、適切に定義されたを使用することをお勧めしdef
ます。
だからこれが私がしたことです
svgFileOpt :: FileOptions
svgFileOpt = FileOptions (800, 600) SVG loadCommonFonts
signal :: [Double] -> [(Double, Double)]
signal xs =
[ (x, (sin (x * 3.14159 / 45) + 1) / 2 * (sin (x * 3.14159 / 5))) | x <- xs ]
plotDayVsDouble :: IO ()
plotDayVsDouble = toFile svgFileOpt "example1_big.png" $ do
layout_title .= "Amplitude Modulation"
setColors [opaque blue, opaque red]
plot (line "am" [signal [0, (0.5) .. 400]])
plot (points "am points" (signal [0, 7 .. 400]))
残念ながら、結果はまったく同じです。mediainfo
寸法情報すら表示されていないことに驚きました。
$ mediainfo example1_big.png
General
Complete name : example1_big.png
File size : 149 KiB