Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Haskell wrapper for Google Chart API
Haskell
Branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
Graphics Fixed GHC 7.2.1 build breaks. Needed to explicitly use flexible insta…
examples
.gitignore
LICENSE
README.md
Setup.hs
TODO.md
hs-gchart.cabal

README.md

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

Something went wrong with that request. Please try again.