Skip to content
Find file
Fetching contributors…
Cannot retrieve contributors at this time
221 lines (181 sloc) 11.2 KB
import Graphics.GChart
import Data.Char(ord)
{-
Examples to demonstrate usage of GChart.
Some examples are taken from this article : http://24ways.org/2007/tracking-christmas-cheer-with-google-charts
-}
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" ]
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"
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
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
bargraph2 = getChartUrl $ do setChartSize 600 300
setChartType BarHorizontalGrouped
setDataEncoding simple
addChartData dataSeries1
setChartTitleWithColor "Food and Drink Consumed Christmas 2007" "00AF33"
addAxis $ makeAxis { axisType = AxisBottom }
addAxis $ makeAxis { axisType = AxisLeft,
axisLabels = Just labelSeries1 }
addColor "00AF33"
bargraphAutoSpacing = getChartUrl $ do setChartSize 190 125
setChartType BarVerticalGrouped
setDataEncoding simple
addChartData ([10,15,20,25,30]::[Int])
addChartData ([13,5,6,34,12]::[Int])
setColors ["4d89f9","000000"]
setBarWidthSpacing automatic
bargraphRelativeSpacing = getChartUrl $ do setChartSize 190 125
setChartType BarVerticalGrouped
setDataEncoding simple
addChartData ([10,15,20,25,30]::[Int])
addChartData ([13,5,6,34,12]::[Int])
setColors ["4d89f9","000000"]
setBarWidthSpacing $ relative 0.5 1.5
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 }
lineChartWithLineStyles = getChartUrl $ do setChartSize 200 125
setChartType Line
setDataEncoding simple
addChartData $ map encSimpleReverse "93zyvneTTOMJMLIJFHEAECFJGHDBFCFIERcgnpy45879"
addLineStyle $ makeLineStyle { lineStyleThickness = 3, lineStyleLineSegment = 6, lineStyleBlankSegment = 3 }
addChartData $ map encSimpleReverse "IJKNUWUWYdnswz047977315533zy1246872tnkgcaZQONHCECAAAAEII"
addLineStyle $ makeLineStyle { lineStyleThickness = 1, lineStyleLineSegment = 1, lineStyleBlankSegment = 0 }
formulaChart = getChartUrl $ do setChartType Formula
setChartHeight 200
setFormula "\\Large\\mathbb{Q}+\\lim_{x\\to3}\\frac{1}{x}"
addColor "FF0000"
addFill $ Fill (LinearGradient 20 [("76A4FB",1),("FFFFFF",0)]) Background
qrCodeChart = getChartUrl $ do setChartType QRCode
setChartSize 150 150
setLabel "Hello World"
setQREncoding UTF8
setQRErrorCorrection L'
barGraphWithShiftedZeroLine = getChartUrl $ do setChartType BarVerticalGrouped
setChartSize 320 200
setDataEncoding text
addChartData ([30,-60,50,140,80,-90]::[Float])
addDataScale (-80,140)
addAxis $ makeAxis { axisType = AxisLeft,
axisRange = Just $ Range (-80,140) Nothing}
lineMarkerSample = getChartUrl $ do setChartType BarVerticalGrouped
setChartSize 200 150
setDataEncoding simple
setBarWidthSpacing $ barwidth 20
addChartData $ map encSimpleReverse "1XQbnf4"
addColor "76A4FB"
addLineMarker $ makeLineMarker { lineColor = "0033FF",
lineWhichPoints = PointsAll,
lineZorder = 1 }
lineFillSample = getChartUrl $ do setChartType Line
setChartSize 200 125
setDataEncoding simple
addChartData $ map encSimpleReverse "cefhjkqwrlgYcfgc"
addLineFill (LineFillBetween 0 1) "224499"
addChartData $ map encSimpleReverse "QSSVXXdkfZUMRTUQ"
addLineFill (LineFillBetween 1 2) "FF0000"
addChartData $ map encSimpleReverse "HJJMOOUbVPKDHKLH"
addLineFill (LineFillBetween 2 3) "80C65A"
addAxis $ makeAxis { axisType = AxisBottom,
axisLabels = Just ["Sep","Oct","Nov","Dec"] }
addAxis $ makeAxis { axisType = AxisLeft,
axisLabels = Just ["","50","100"] }
blanks x = replicate x ""
dataSeries1 :: [Int]
dataSeries1 = [10,20,8,25,5,3,15,9,5]
dataSeries2 :: [(Float,Float)]
dataSeries2 = [(0,0),(100,100)]
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]
dataSeries5 :: [(Int,Int)]
dataSeries5 = zip xseries yseries where
xseries = map encSimpleReverse "984sttvuvkQIBLKNCAIipr3z9"
yseries = map encSimpleReverse "DEJPgq0uov17_zwopQOD"
labelSeries1 = ["Egg nog",
"Christmas Ham",
"Milk (not including egg nog)",
"Cookies",
"Roasted Chestnuts",
"Chocolate",
"Various Other Beverages",
"Various Other Foods",
"Snacks"]
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
main = do putStrLn christmasPie
putStrLn barGraph
putStrLn linexyGraph1
putStrLn linexyGraph2
putStrLn bargraph2
putStrLn bargraphAutoSpacing
putStrLn bargraphRelativeSpacing
putStrLn scatterPlotWithMarkers
putStrLn lineChartWithLineStyles
putStrLn formulaChart
putStrLn qrCodeChart
Something went wrong with that request. Please try again.