2012-01-26 10 views
27

¿Hay una biblioteca Haskell para dibujar gráficos similares a MATLAB, scilab o matplotlib? Todos ellos tienen interfaces muy simples, que funcionan como una máquina de estados:Haskell plotting library similar a MATLAB

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

que sería bueno para mostrar parcelas en una ventana y tener capacidad de escribir en el disco.

+2

edité su pregunta y sustituye "numpy" con "matplotlib", ya que numpy no es un/biblioteca de gráficos trazado - Asumo que significaba matplotlib, pero no dude en corrígelo si estoy equivocado. – Chris

Respuesta

12

¿Qué hay de gnuplot?

Por ejemplo, plotList de Graphics.Gnuplot.Simple:

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

'gnuplot' es bueno, pero no llamaría simple a su interfaz. –

+1

No me gusta depender de aplicaciones externas. Gracias de cualquier manera. – Trismegistos

+1

Veo que, de hecho, no hay nada mejor que esto. Gracias. – Trismegistos

9

De una mirada a matplotlib, no creo que el ecosistema Haskell tiene algo tan rico en funciones. Sin embargo, estoy contento con los resultados producidos por la biblioteca Chart. También hay enlaces a graphviz (que vincula uno de varios) y Ubigraph.

Editar: En respuesta a la solicitud de trazado (x, y) las coordenadas:

No estoy del todo claro lo que quiere. Si usted tiene una función f :: x -> y continuación, sólo tiene que utilizar la función plotWindow (o PNG, etc):

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

Si usted tiene un montón de puntos, [(x,y)], a continuación, el mismo código con una búsqueda en la lista, en lugar de una función continua como sin, debería funcionar bien. Vea la página enlazada para muchos ejemplos.

+0

¿Podría darnos un ejemplo muy simple de trazar ys contra xs? Gracias. – Trismegistos

5

También está el paquete plot. Cuando se usa con plot-gtk, los gráficos pueden mostrarse y modificarse dentro de GHCi. Los diagramas pueden escribirse en el disco en los formatos que Cairo admite.

La interfaz es similar a Simplegnuplot 's:

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 
+0

Parece prometedor, lo intentaré. – Trismegistos

1

Try gnuplot. Es de lenguaje cruzado, bastante rápido a escala, y siempre es bueno saberlo, incluso si es antiguo. Estas instrucciones deben conseguir que un ejemplo de trabajo:

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)