hs-gchart

Haskell wrapper for the Google Chart API http://github.com/deepakjois/hs-gchart

Latest on Hackage:0.4.1

This package is not currently in any snapshots. If you're interested in using it, we recommend adding it to Stackage Nightly. Doing so will make builds more reliable, and allow stackage.org to host generated Haddocks.

BSD3 licensed by Deepak Jois
Maintained by deepak.jois@gmail.com

Introduction

GChart is a Haskell wrapper around Google Chart API.

There is a library on Hackage called GoogleChart which provides another wrapper, however it has not been updated in a long while. GChart improves upon that effort by trying to design a more elegant API, and supporting more chart types and features.

Installation

cabal install hs-gchart

Documentation

Getting Started

These examples below are available in examples/Examples.hs in the source tarball. Look at the source file for more Some examples are taken from this article

For examples 1 and 2, the following code is common

dataSeries1 :: [Int]
dataSeries1 = [10,20,8,25,5,3,15,9,5]

labelSeries1 = ["Egg nog",
                "Christmas Ham",
                "Milk (not including egg nog)",
                "Cookies",
                "Roasted Chestnuts",
                "Chocolate",
                "Various Other Beverages",
                "Various Other Foods",
                "Snacks"]

Example 1 : Pie Chart

The code below

 christmasPie = getChartUrl $ do setChartSize 600 300
                                 setDataEncoding simple
                                 setChartType Pie
                                 addChartData dataSeries1
                                 setChartTitle "Food and Drink Consumed Christmas 2007"
                                 setLabels labelSeries1
                                 setColors ["00AF33",
                                            "4BB74C",
                                            "EE2C2C",
                                            "CC3232",
                                            "33FF33",
                                            "66FF66",
                                            "9AFF9A",
                                            "C1FFC1",
                                            "CCFFCC" ]

Generates the following chart.

Generated Pie Chart

Example 2 : Bar Chart

The code below

barGraph = getChartUrl $ do setChartSize 600 300
                            setDataEncoding simple
                            setChartType BarHorizontalGrouped
                            addChartData dataSeries1
                            setChartTitle "Food and Drink Consumed Christmas 2007"
                            addAxis $ makeAxis {  axisType = AxisBottom }
                            addAxis $ makeAxis {  axisType = AxisLeft,
                                                  axisLabels = Just labelSeries1 }
                            addColor "00AF33"

Generates the following chart

Generated Bar Chart

Example 3 : Line XY Chart 1

The code below

linexyGraph1 =
    getChartUrl $ do setChartSize 800 300
                     setChartType LineXY
                     setDataEncoding text
                     setChartTitle "Projected Christmas Cheer for 2007"
                     setGrid $ makeGrid { xAxisStep = 3.333,
                                          yAxisStep = 10,
                                          lineSegmentLength = Just 1,
                                          blankSegmentLength = Just 3 }
                     addAxis $ makeAxis { axisType = AxisLeft,
                                          axisRange = Just $ Range (0,100) (Just 50) }
                     addAxis $ makeAxis { axisType = AxisBottom,
                                          axisLabels = Just $ ["Dec 1st"] ++ blanks 4 ++ ["6th"] ++ blanks 18 ++ ["25th","26th"] ++ blanks 4 ++ ["Dec 31st"] }
                     addChartDataXY dataSeries2

dataSeries2 :: [(Float,Float)]
dataSeries2 = [(0,0),(100,100)]

blanks x = take x $ repeat ""

Generates the following chart

Line Graph

Example 4 : Line XY Chart 2

The code below

linexyGraph2 = 
    getChartUrl $ do setChartSize 800 300
                     setChartType LineXY
                     setDataEncoding text
                     setChartTitle "Projected Christmas Cheer for 2007"
 
                     setGrid $ makeGrid { xAxisStep = 3.333,
                                          yAxisStep = 10,
                                          lineSegmentLength = Just 1,
                                          blankSegmentLength = Just 3 }
 
                     addAxis $ makeAxis { axisType = AxisLeft,
                                          axisRange = Just $ Range (0,100) (Just 50) }
                     addAxis $ makeAxis { axisType = AxisBottom,
                                          axisLabels = Just $ ["Dec 1st"] ++ blanks 4 ++ ["6th"] ++ blanks 18 ++ ["25th","26th"] ++ blanks 4 ++ ["Dec 31st"] }
 
                     addChartDataXY dataSeries3
                     addColor "458B00"
 
                     addChartDataXY dataSeries4
                     addColor "CD2626"
 
                     setLegend $ legendWithPosition ["2006","2007"] LegendRight
 
dataSeries3 :: [(Float,Float)]
dataSeries3 = zip [0,16.7,23.3,33.3,60,76.7,83.3,86.7,93.3,96.7,100] [30,45,20,50,15,80,60,70,40,55,80]
 
dataSeries4 :: [(Float,Float)]
dataSeries4 = zip [0,10,16.7,26.7,33.3] [50,10,30,55,60]

blanks x = take x $ repeat ""

Generates the following chart

Line Graph

Example 5 : Scatter Plot with Shape Markers

The code below

scatterPlotWithMarkers = getChartUrl $ do setChartSize 200 125
                                          setChartType ScatterPlot
                                          setDataEncoding simple
                                          addChartDataXY dataSeries5
                                          addAxis $ makeAxis { axisType = AxisBottom,
                                                               axisLabels = Just $ blanks 1 ++ ["1","2","3","4","5"] }
                                          addAxis $ makeAxis { axisType = AxisLeft,
                                                               axisLabels = Just $ blanks 1 ++ ["50","100"] }
                                          setGrid $ makeGrid { xAxisStep = 20, yAxisStep = 25 }
 
                                          addShapeMarker $ makeShapeMarker { shapeType  = ShapeSquare
                                                                           , shapeColor = "ff0000"
                                                                           , shapeSize  = 10 }
 
-- Reverse engineering sample data from webpage
dataSeries5 :: [(Int,Int)]
dataSeries5 = zip xseries yseries where
             xseries = map encSimpleReverse "984sttvuvkQIBLKNCAIipr3z9"
             yseries = map encSimpleReverse "DEJPgq0uov17_zwopQOD"
 
encSimpleReverse :: Char -> Int
encSimpleReverse c | ord c >= ord 'A' && ord c <= ord 'Z' = (ord c - ord 'A')
                   | ord c >= ord 'a' && ord c <= ord 'z' = 26 + (ord c - ord 'a')
                   | ord c >= ord '0' && ord c <= ord '9' = 52 + (ord c - ord '0')
                   | otherwise = -1

Generates the following chart

Scatter Plot with Shape Markers

Depends on:
Used by 1 package:
comments powered byDisqus