This module is for generating web-based charts using Google's Chart API: http://code.google.com/apis/chart/. Its output is URLs that will resolve to a PNG image of the resulting chart.
Most of the functions in this module, with names like setFoo
, take a Chart
as an argument and produce a new Chart
with the specified attribute added.
These calls are designed to be chained together. See the example below.
Chart
s are represented as a hierarchy of type classes so that parameters
that only affect a specific chart type are only available to that chart type.
putStrLn "URL for your chart:" putStrLn $chartURL
$setSize
400 257 $setTitle
"My Chart" $setData
(encodeDataSimple
[[1..20]]) $setLegend
["1 to 20"] $newLineChart
This produces: http://chart.apis.google.com/chart?chs=400x257&chtt=My+Chart&chd=s%3aBCDEFGHIJKLMNOPQRSTU&chdl=1+to+20&cht=lc
Remaining features to implement:
- lxy line charts
- chbh bar charts
- scatter plots
- background/fill colors
- all style attributes
- class Chart c
- chartURL :: Chart c => c -> String
- setSize :: Chart c => Int -> Int -> c -> c
- setTitle :: Chart c => String -> c -> c
- setTitleOpts :: Chart c => String -> Int -> c -> c
- setData :: Chart c => ChartData -> c -> c
- data ChartData
- encodeDataSimple :: [[Int]] -> ChartData
- encodeDataText :: RealFrac a => [[a]] -> ChartData
- encodeDataExtended :: [[Int]] -> ChartData
- setDataColors :: Chart c => [String] -> c -> c
- class Chart c => LegendChart c
- setLegend :: LegendChart c => [String] -> c -> c
- class Chart c => AxisLabelChart c
- setAxisTypes :: AxisLabelChart c => [AxisType] -> c -> c
- data AxisType
- = AxisBottom
- | AxisTop
- | AxisLeft
- | AxisRight
- setAxisLabels :: AxisLabelChart c => [[String]] -> c -> c
- setAxisLabelPositions :: AxisLabelChart c => [[Int]] -> c -> c
- setAxisRanges :: AxisLabelChart c => [(Int, Int)] -> c -> c
- data AxisAlignment
- = AlignLeft
- | AlignCenter
- | AlignRight
- setAxisStyles :: AxisLabelChart c => [(String, Int, AxisAlignment)] -> c -> c
- data LineChart
- newLineChart :: LineChart
- data PieChart
- newPieChart :: PieStyle -> PieChart
- data PieStyle
- setLabels :: [String] -> PieChart -> PieChart
- data BarChart
- newBarChart :: Orientation -> BarStyle -> BarChart
- data Orientation
- = Horizontal
- | Vertical
- data BarStyle
- data VennDiagram
- newVennDiagram :: VennDiagram
Chart basics
These functions and types are shared by all chart types.
The type class underneath all Charts.
setSize :: Chart c => Int -> Int -> c -> cSource
Set the width and height, in pixels, of the resulting image.
Set options for the display of the title of the chart.
Chart data
There are multiple options for encoding chart data. See http://code.google.com/apis/chart/#chart_data for more details on the tradeoffs of the different encoding options.
encodeDataSimple :: [[Int]] -> ChartDataSource
Encode data using the "simple" encoding, which maps each input value
to a single letter in the URL. This produces minimal URLs but doesn't have
as lot of resolution. Input values must be in the range 0 <= x <= 61
.
Values outside the valid input range will be considered missing data.
encodeDataText :: RealFrac a => [[a]] -> ChartDataSource
Encode data using the "text" encoding, which maps each input value to
its string representation (e.g. "3.4") in the URL. This has more
resolution than simple encoding but produces larger URLs. Input values must
be in the range 0 <= x <= 100
. Values outside the valid input range will
be considered missing data. Values with more than one decimal place of
resolution will be rounded.
encodeDataExtended :: [[Int]] -> ChartDataSource
Encode data using the "extended" encoding, which maps each input value
to a two-character pair in base 64. This has more resolution than text
encoding and is more compact. Input values must be in the range 0 <= x <=
4095
. Values outside the valid input range will be considered missing
data.
setDataColors :: Chart c => [String] -> c -> cSource
Set data set colors. The nth color specified here colors the nth data
set in the ChartData
passed to setData
. See
http://code.google.com/apis/chart/#line_bar_pie_colors for more
information.
Chart features
Legends
class Chart c => LegendChart c Source
LegendChart represents charts that can display legends with setLegend
.
setLegend :: LegendChart c => [String] -> c -> cSource
Set the legend for the corresponding data sets. The colors are taken from the data set colors.
Axis labels
The order of elements in the lists passed to these functions matter:
If the first AxisType
passed to setAxisTypes
is AxisBottom
, then
the first set of labels passed to setAxisLabels
refers to that bottom
axis.
class Chart c => AxisLabelChart c Source
AxisLabelChart represents charts that can display axis labels.
setAxisTypes :: AxisLabelChart c => [AxisType] -> c -> cSource
Set which axes to display. Repeating an AxisType
produces multiple
sets of labels on that axis.
setAxisLabels :: AxisLabelChart c => [[String]] -> c -> cSource
Set axis labels. The nth list of strings in the argument sets the labels
for the nth axis specified with setAxisTypes
. An empty list of strings
skips labelling the corresponding axis.
setAxisLabelPositions :: AxisLabelChart c => [[Int]] -> c -> cSource
Set axis label positions. The nth list of Ints in the argument sets the
positions for the nth axis specified with setAxisTypes
. An empty list
skips setting position for the corresponding axis.
setAxisRanges :: AxisLabelChart c => [(Int, Int)] -> c -> cSource
Set axis ranges. The nth pair of Ints in the argument sets the range
for the nth axis specified with setAxisTypes
.
setAxisStyles :: AxisLabelChart c => [(String, Int, AxisAlignment)] -> c -> cSource
Set axis styles. The nth element in the argument sets the style for the
nth axis specified with setAxisTypes
. Each style is a tuple of
(color, font size, text alignment).
Specific chart types
Line charts
Pie charts
setLabels :: [String] -> PieChart -> PieChartSource
Set labels for the different data points on the chart. Specify missing values by passing an empty string.
Bar charts
newBarChart :: Orientation -> BarStyle -> BarChartSource
Venn diagrams
data VennDiagram Source
Venn diagram data is specified in a particular format. There should be exactly seven data values, which represent, in order: circle A size, circle B size, circle C size, A/B overlap, A/C overlap, B/C overlap, A/B/C overlap.