Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 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)