Improve linear ticks

Base the tick formatter off the entire set of ticks rather than just the extent. This avoids a couple of formatting bugs when the max value if close to a magnitude boundary.

__Before__
`200, 400, 600, 800, 1000`
formatted as
`0k, 0k, 1k, 1k, 1k`

__After__
`200, 400, 600, 800, 1000`
formatted as
`0.2k, 0.4k, 0.6k, 0.8k, 1.0k`