Библиотека графики Haskell похожа на MATLAB

Есть ли библиотека Haskell для рисования графиков, похожих на MATLAB, scilab или matplotlib? Все они имеют очень простые интерфейсы, которые работают как конечный автомат:

plot(xs, ys)
show() -- opens window with plot

Было бы неплохо отображать графики в окне и иметь возможность записывать их на диск.

Ответ 1

Как насчет gnuplot?

Например, plotList from Graphics.Gnuplot.Simple:

plotList [] [(1, 1), (2, 2), (3, 3)]

Ответ 2

С первого взгляда на matplotlib я не думаю, что экосистема Haskell имеет что-то особенное. Тем не менее, я был доволен результатами, полученными библиотекой Chart. Существуют также привязки к graphviz (который связывает один из нескольких) и Ubigraph.

Изменить: ответ на запрос для построения координат (x, y):

Я не совсем понимаю, чего вы хотите. Если у вас есть функция f :: x -> y, просто используйте функцию plotWindow (или PNG и т.д.):

import Graphics.Rendering.Chart.Simple
main = plotWindow [0,0.1..5::Double] sin

Если у вас есть куча точек, [(x,y)], то тот же код с поиском в списке вместо непрерывной функции, такой как sin, должен работать нормально. См. Связанную страницу для многих примеров.

Ответ 3

Существует также пакет plot. При использовании графиков plot-gtk могут отображаться и изменяться в пределах GHCi. Графики могут записываться на диск в форматах, поддерживаемых Cairo.

Интерфейс Simple похож на gnuplot:

test_graph2 = do
     plot (ts,[point (ds,es) (Cross,red),line fs blue])
     title "Testing plot package:"
     subtitle "with 1 second of a 15Hz sine wave"
     xlabel "time (s)"
     ylabel "amplitude"
     yrange Linear (-1.25) 1.25

Ответ 4

Попробуйте gnuplot. Это кросс-язык, довольно быстрый по масштабу, и всегда приятно знать, даже если он старый. Эти инструкции должны привести вам рабочий пример:

cabal install gnuplot
sudo apt-get install gnuplot-x11

ghci
GHCi, version 7.4.1: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
h> import Graphics.Gnuplot.Simple
h> plotFunc [] (linearScale 1000 (-20,20)) (\x -> sin x / x)