2012-01-26 2 views
27

Esiste una libreria Haskell per disegnare grafici simili a MATLAB, scilab o matplotlib? Tutti hanno interfacce molto semplici, che funzionano come una macchina a stati:Libreria di plottaggio Haskell simile a MATLAB

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

sarebbe bello per visualizzare grafici in una finestra e di avere la capacità di scriverle su disco.

+2

Ho modificato la tua domanda e sostituito "NumPy" con "matplotlib", dal momento che NumPy non è un grafico/biblioteca tramando - Suppongo che si intende matplotlib, ma sentitevi liberi di correggilo se sbaglio. – Chris

risposta

12

Che dire di gnuplot?

Per esempio, plotList da Graphics.Gnuplot.Simple:

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

'gnuplot' è buono, ma non chiamerei la sua interfaccia semplice. –

+1

Non mi piace dipendere da applicazioni esterne. Grazie comunque. – Trismegistos

+1

Vedo che in effetti non c'è niente di meglio di questo. Grazie. – Trismegistos

9

Da uno sguardo matplotlib, non credo che l'ecosistema Haskell ha nulla come ricco di funzionalità. Tuttavia, sono stato soddisfatto dei risultati prodotti dalla libreria Chart. Ci sono anche collegamenti a graphviz (che collega uno dei vari) e Ubigraph.

Edit: In risposta alla richiesta per la stampa (x, y) coordinate

Io non sono del tutto chiaro ciò che si desidera. Se si dispone di una funzione f :: x -> y poi basta utilizzare la funzione plotWindow (o PNG, ecc):

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

Se si dispone di un sacco di punti, [(x,y)], poi lo stesso codice con una ricerca nella lista, invece di un funzione continua come sin, dovrebbe funzionare bene. Vedi la pagina collegata per molti molti esempi.

+0

Puoi dare un esempio molto semplice di plottaggio di ys contro xs? Grazie. – Trismegistos

5

C'è anche il pacchetto plot. Se utilizzato con i grafici plot-gtk, è possibile visualizzarli e modificarli all'interno di GHCi. I grafici possono essere scritti su disco nei formati supportati da Cairo.

L'interfaccia è simile a quella 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

Sembra promettente, farò un tentativo. – Trismegistos

1

Prova gnuplot. È un linguaggio incrociato, abbastanza rapido, e sempre una cosa carina da sapere, anche se è vecchio. Queste istruzioni devono farti un esempio di lavoro:

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)