data-viz-lab/elm-chart-builder/4.2.1

NOTE: the latest version is 7.0.2

Chart.Line

This is the line chart module from elm-chart-builder.

It expects the X axis to plot time or continuous data and the Y axis to plot continuous data.

Chart Data Format

type alias Accessor data =
AccessorContinuousOrTime data

The data accessors

A line chart can have the X axis as continuous or time data.

type Accessor data
    = AccessorContinuous (accessorContinuous data)
    | AccessorTime (accessorTime data)
type alias AccessorContinuous data =
{ xGroup : data -> Maybe String
, xValue : data -> Float
, yValue : data -> Float
}

The accessor structure for x continuous lines.

type alias AccessorTime data =
{ xGroup : data -> Maybe String
, xValue : data -> Posix
, yValue : data -> Float
}

The accessor structure for x time lines.

continuous : AccessorContinuousStruct data -> Accessor data

The accessor constructor for x continuous lines.

Line.continuous (Line.AccessorContinuous .groupLabel .x .y)
time : AccessorTimeStruct data -> Accessor data

The accessor constructor for x time lines.

Line.time (Line.AccessorTime .groupLabel .x .y)

Chart Initialization

init : RequiredConfig -> Config

Initializes the line chart with a default config

data : List Data
data =
    [ { groupLabel = "A"
      , x = Time.millisToPosix 1579275175634
      , y = 10
      }
    , { groupLabel = "A"
      , x = Time.millisToPosix 1579285175634
      , y = 16
      }
    , { groupLabel = "B"
      , x = Time.millisToPosix 1579275175634
      , y = 13
      }
    , { groupLabel = "B"
      , x = Time.millisToPosix 1579285175634
      , y = 23
      }
    ]


accessor : Line.Accessor data
accessor =
    Line.time (Line.accessorTime .groupLabel .x .y)


Line.init
    { margin =
        { top = 10
        , right = 10
        , bottom = 30
        , left = 30
        }
    , width = 500
    , height = 200
    }
    |> Line.render (data, accessor)

Chart Rendering

render : ( List data, Accessor data ) -> Config -> Html msg

Renders the line chart, after initialisation and customisation

Line.init requiredConfig
    |> Line.render ( data, accessor )

Configuration

type alias Config =
Config

The Config opaque type

type alias RequiredConfig =
RequiredConfig

The required config, passed as an argument to the init function

Optional Configuration setters

withColorPalette : List Color -> Config -> Config

Sets the color palette for the chart.

palette =
    -- From elm-visualization
    Scale.Color.tableau10


Line.init requiredConfig
    |> Line.withColorPalette palette
    |> Line.render (data, accessor)
withCurve : (List ( Float, Float ) -> SubPath) -> Config -> Config

Sets the line curve shape

Defaults to Shape.continuousCurve

See elm-visualization/latest/Shape for more info.

Line.init requiredConfig
    |> Line.withCurve Shape.monotoneInXCurve
    |> Line.render ( data, accessor )
withDesc : String -> Config -> Config

Sets an accessible, long-text description for the svg chart.

It defaults to an empty string. This shuld be set if no title nor description exists for the chart, for example in a sparkline.

Line.init requiredConfig
    |> Line.withDesc "This is an accessible chart"
    |> Line.render ( data, accessor )
withLabels : Label -> Config -> Config

Show a label at the end of the lines.

It takes one of: xGroupLabel

⚠ Use with caution, there is no knowledge of text wrapping!

defaultLayoutConfig
    |> Line.withLabels Line.xGroupLabel
withGroupedLayout : Config -> Config

Creates a grouped line chart.

Line.init requiredConfig
    |> Line.withGroupedLayout
    |> Line.render ( data, accessor )
withLineStyle : List ( String, String ) -> Config -> Config

Sets the style for the lines The styles set here have precedence over withColorPalette and css.

Line.init requiredConfig
    |> Line.withLineStyle [ ( "stroke-width", "2" ) ]
    |> Line.render ( data, accessor )
withTableFloatFormat : (Float -> String) -> Config -> Config

An optional formatter for all float values in the alternative table content for accessibility.

Defaults to String.fromFloat

Line.init requiredConfig
    |> Line.withTableFloatFormat String.fromFloat
    |> Line.render ( data, accessor )
withTablePosixFormat : (Posix -> String) -> Config -> Config

An optional formatter for all posix values in the alternative table content for accessibility.

Defaults to Time.posixToMillis >> String.fromInt

Line.init requiredConfig
    |> Line.withTablePosixFormat (Time.posixToMillis >> String.fromInt)
    |> Line.render ( data, accessor )
withoutTable : Config -> Config

Do not build an alternative table content for accessibility

⚠ By default an alternative table is always being rendered. Use this option to not build the table.

Line.init requiredConfig
    |> Line.withoutTable
    |> Line.render ( data, accessor )
withStackedLayout : LineDraw -> Config -> Config

Creates a stacked line chart.

It takes a direction: diverging or noDirection

Line.init requiredConfig
    |> Line.withStackedLayout
    |> Line.render ( data, accessor )
withTitle : String -> Config -> Config

Sets an accessible title for the svg chart.

It defaults to an empty string. This shuld be set if no title nor description exists for the chart, for example in a sparkline.

Line.init required
    |> Line.withTitle "Line chart"
    |> Line.render ( data, accessor )
withXContinuousDomain : ( Float, Float ) -> Config -> Config

Sets the Y domain of a continuous line chart

If not set, the domain is calculated from the data. If set on a continuous line chart this setting will have no effect.

Line.init requiredConfig
    |> Line.withXContinuousDomain ( 0, 10 )
    |> Line.render ( data, accessor )
withXTimeDomain : ( Posix, Posix ) -> Config -> Config

Sets the Y domain of a time line chart

If not set, the domain is calculated from the data. If set on a continuous line chart this setting will have no effect.

Line.init requiredConfig
    |> Line.withXTimeDomain ( Time.millisToPosix 1579275175634, 10 )
    |> Line.render ( data, accessor )
withYDomain : ( Float, Float ) -> Config -> Config

Sets the Y domain of a line chart

This is always a continuous domain, not a time domain. If not set, the domain is calculated from the data. If set on a continuous line chart this setting will have no effect.

Line.init required
    |> Line.withYDomain ( Time.millisToPosix 1579275175634, Time.millisToPosix 1579375175634 )
    |> Line.render ( data, accessor )
withLogYScale : Float -> Config -> Config

Set the Y scale to logaritmic, passing a base

Line.init requiredConfig
    |> Line.withLogYScale 10
    |> Line.render ( data, accessor )

Axis

type alias XAxis value =
XAxis value

The XAxis type

type alias YAxis value =
YAxis value

The YAxis type

hideAxis : Config -> Config

Hide all axis

Line.init requiredConfig
    |> Line.hideAxis
    |> Line.render ( data, accessor )
hideXAxis : Config -> Config

Hide the X aixs

The X axis depends from the layout: With a vertical layout the X axis is the horizontal axis. With a horizontal layout the X axis is the vertical axis.

Line.init requiredConfig
    |> Line.hideXAxis
    |> Line.render ( data, accessor )
hideYAxis : Config -> Config

Hide the Y aixs

The Y axis depends from the layout: With a vertical layout the Y axis is the vertical axis. With a horizontal layout the Y axis is the horizontal axis.

Line.init
    { margin = margin
    , width = width
    , height = height
    }
    |> Line.hideYAxis
    |> Line.render ( data, accessor )
withXAxisContinuous : XAxis Float -> Config -> Config

Customise the continuous xAxis

Line.init requiredConfig
    |> Line.withXAxisContinuous (Line.axisBottom [ Axis.tickCount 5 ])
    |> Line.render ( data, accessor )
withXAxisTime : XAxis Posix -> Config -> Config

Customise the time xAxis

Line.init requiredConfig
    |> Line.withXAxisTime (Line.axisBottom [ Axis.tickCount 5 ])
    |> Line.render ( data, accessor )
withYAxis : YAxis Float -> Config -> Config

Customise the yAxis

Line.init requiredConfig
    |> Line.withYAxis (Line.axisRight [ Axis.tickCount 5 ])
    |> Line.render ( data, accessor )
withSymbols : List Symbol -> Config -> Config

Pass a list of symbols to the line chart, one per data group. If the list is empty, no symbols are rendered.

Default value: []

defaultLayoutConfig
    |> withSymbols [ Circle, Corner, Triangle ]

Configuration arguments

axisBottom : List (Attribute value) -> XAxis value

It returns an XAxis bottom type

Line.axisBottom [ Axis.tickCount 5 ]
axisGrid : List (Attribute value) -> YAxis value

It returns an YAxis Grid type

Line.axisGrid [ Axis.tickCount 5 ]
axisLeft : List (Attribute value) -> YAxis value

It returns an YAxis Left type

Line.axisLeft [ Axis.tickCount 5 ]
axisRight : List (Attribute value) -> YAxis value

It returns an YAxis right type

Line.axisRight [ Axis.tickCount 5 ]
xGroupLabel : Label
(List (List ( Float, Float )) -> List (List ( Float, Float )))
-> LineDraw
TODO
drawLine : LineDraw
TODO