Ответ 1
Как насчет gnuplot?
Например, plotList
from Graphics.Gnuplot.Simple
:
plotList [] [(1, 1), (2, 2), (3, 3)]
Есть ли библиотека Haskell для рисования графиков, похожих на MATLAB, scilab или matplotlib? Все они имеют очень простые интерфейсы, которые работают как конечный автомат:
plot(xs, ys)
show() -- opens window with plot
Было бы неплохо отображать графики в окне и иметь возможность записывать их на диск.
Как насчет gnuplot?
Например, plotList
from Graphics.Gnuplot.Simple
:
plotList [] [(1, 1), (2, 2), (3, 3)]
С первого взгляда на 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
, должен работать нормально. См. Связанную страницу для многих примеров.
Существует также пакет 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
Попробуйте 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)