ihaskell-plot-0.3.0.1: IHaskell/Display/Plot.hs
module IHaskell.Display.Plot where
import qualified Data.ByteString.Char8 as Char
import Graphics.Rendering.Plot
import Control.Monad (void)
import Control.Applicative ((<$>))
import IHaskell.Display
instance IHaskellDisplay (Figure a) where
display fig = do
let figure = void fig
pngDisp <- figureData figure PNG
svgDisp <- figureData figure SVG
return $ Display [pngDisp, svgDisp]
figureData :: Figure () -> OutputType -> IO DisplayData
figureData figure format = do
switchToTmpDir
-- Width and height
let size = 300
w = size
h = size
-- Write the image.
let fname = ".ihaskell-plot." ++ extension format
writeFigure format fname (w, h) figure
-- Read back, and convert to base64.
imgData <- Char.readFile fname
let value =
case format of
PNG -> png w h $ base64 imgData
SVG -> svg $ Char.unpack imgData
_ -> error "Unsupported format for display"
return value
where
extension SVG = "svg"
extension PNG = "png"
extension _ = ""