@@ -8,7 +8,6 @@ defmodule Matplotex.Colorscheme.Garner do
88
99 def garn_color ( { min , max } = range , point , cmap ) when max != min do
1010 cue = ( point - min ) / ( max - min )
11-
1211 cmap
1312 |> make_from_cmap ( )
1413 |> put_range ( range , cue )
@@ -31,27 +30,37 @@ defmodule Matplotex.Colorscheme.Garner do
3130
3231 defp place_edges ( [ preceeding , minor , major , final ] ) do
3332 % __MODULE__ {
34- preceeding: preceeding . color ,
35- minor: minor . color ,
36- major: major . color ,
37- final: final . color
33+ preceeding: { preceeding . color , preceeding . offset } ,
34+ minor: { minor . color , minor . offset } ,
35+ major: { major . color , major . offset } ,
36+ final: { final . color , final . offset }
3837 }
3938 end
4039
4140 defp place_edges ( _ ) do
4241 raise InputError , message: "Invalid colormap"
4342 end
4443
45- defp point_color ( % __MODULE__ { color_cue: cue , preceeding: preceeding , minor: minor } )
46- when cue < minor do
47- minor |> Blender . mix ( preceeding , cue ) |> Rgb . to_string ( )
44+ defp point_color ( % __MODULE__ { color_cue: cue , preceeding: { preceeding , preceeding_offset } , minor: { minor , minor_offset } } )
45+ when cue <= minor_offset do
46+
47+ cue = mix_perces ( cue , preceeding_offset , minor_offset )
48+ minor |> Blender . mix ( preceeding , cue ) |> Rgb . to_string ( )
4849 end
4950
50- defp point_color ( % __MODULE__ { color_cue: cue , minor: minor , major: major } ) when cue < major do
51+ defp point_color ( % __MODULE__ { color_cue: cue , minor: { minor , minor_offset } , major: { major , major_offset } } ) when cue <= major_offset do
52+ cue = mix_perces ( cue , minor_offset , major_offset )
5153 major |> Blender . mix ( minor , cue ) |> Rgb . to_string ( )
5254 end
5355
54- defp point_color ( % __MODULE__ { color_cue: cue , major: major , final: final } ) when cue >= major do
55- final |> Blender . mix ( major ) |> Rgb . to_string ( )
56+ defp point_color ( % __MODULE__ { color_cue: cue , major: { major , major_offset } , final: { final , final_offset } } ) when cue > major_offset do
57+ cue = mix_perces ( cue , major_offset , final_offset )
58+ final |> Blender . mix ( major , cue ) |> Rgb . to_string ( )
5659 end
60+
61+ defp mix_perces ( cue , preceeding , postceeding ) when preceeding != postceeding do
62+ ( cue - preceeding ) / ( postceeding - preceeding )
63+ end
64+ defp mix_perces ( cue , _ , _ ) , do: cue
65+
5766end
0 commit comments