terezka/line-charts/2.0.0

NOTE: the latest version is 2.0.2

LineChart.Axis.Values

Use in Ticks.custom for creating "nice" values.

ticksConfig : Ticks.Config msg
ticksConfig =
  Ticks.custom <| \dataRange axisRange ->
    List.map Tick.int (valuesWithin dataRange)


valuesWithin : Coordinate.Range -> List Int
valuesWithin =
  Values.int (Values.around 3)

See full example here.

** What are "nice" numbers/integers/datetimes? **

When I say "nice", I just mean that I try to calculate intervals which begin with 10, 5, 3, 2, 1 (adjusted to magnitude, of course!). For dates, I try to hit whole days, weeks, months or hours, minutes, and seconds.

Nice numbers

int : Amount -> Range -> List Int

Makes nice integers.

valuesWithin : Coordinate.Range -> List Int
valuesWithin =
  Values.int (Values.around 3)

See full example here.

float : Amount -> Range -> List Float

Makes nice floats.

valuesWithin : Coordinate.Range -> List Float
valuesWithin =
  -- something like [ 1, 1.5, 2, 2.5 ]
  Values.float (Values.exactly 4)
type alias Amount =
Amount
around : Int -> Amount

Will get you around the amount of numbers you pass it, although it will prioritize getting "nice" numbers.

exactly : Int -> Amount

Will get you closer to the amount of numbers you pass it, although not actually exactly, since you still want decently "nice" numbers.

P.S. If you have a better name for this function, please contact me.

Nice times

time : Zone -> Int -> Range -> List Time

Makes nice times.

valuesWithin : Coordinate.Range -> List Float
valuesWithin =
  Values.time 5

See full example here.

Custom numbers

custom : Float -> Float -> Range -> List Float

Makes evenly spaced floats.

Arguments:

  1. A number which must be in your resulting numbers (commonly 0).
  2. The interval between your numbers.
  3. The range which your numbers must be between.
ticksConfig : Ticks.Config msg
ticksConfig =
  Ticks.custom <| \dataRange axisRange ->
    List.map Tick.float (Values.custom 45 10 dataRange) ++
    -- ^ Makes [ 25, 45, 55, 65, 75, 85, 95 ]


    List.map Tick.long (Values.custom 30 20 dataRange)
    -- ^ Makes [ 30, 50, 70, 90 ]

See full example here.