@@ -31,27 +31,50 @@ defmodule Matplotex.Colorscheme.Garner do
3131
3232 defp place_edges ( [ preceeding , minor , major , final ] ) do
3333 % __MODULE__ {
34- preceeding: preceeding . color ,
35- minor: minor . color ,
36- major: major . color ,
37- final: final . color
34+ preceeding: { preceeding . color , preceeding . offset } ,
35+ minor: { minor . color , minor . offset } ,
36+ major: { major . color , major . offset } ,
37+ final: { final . color , final . offset }
3838 }
3939 end
4040
4141 defp place_edges ( _ ) do
4242 raise InputError , message: "Invalid colormap"
4343 end
4444
45- defp point_color ( % __MODULE__ { color_cue: cue , preceeding: preceeding , minor: minor } )
46- when cue < minor do
45+ defp point_color ( % __MODULE__ {
46+ color_cue: cue ,
47+ preceeding: { preceeding , preceeding_offset } ,
48+ minor: { minor , minor_offset }
49+ } )
50+ when cue <= minor_offset do
51+ cue = mix_perces ( cue , preceeding_offset , minor_offset )
4752 minor |> Blender . mix ( preceeding , cue ) |> Rgb . to_string ( )
4853 end
4954
50- defp point_color ( % __MODULE__ { color_cue: cue , minor: minor , major: major } ) when cue < major do
55+ defp point_color ( % __MODULE__ {
56+ color_cue: cue ,
57+ minor: { minor , minor_offset } ,
58+ major: { major , major_offset }
59+ } )
60+ when cue <= major_offset do
61+ cue = mix_perces ( cue , minor_offset , major_offset )
5162 major |> Blender . mix ( minor , cue ) |> Rgb . to_string ( )
5263 end
5364
54- defp point_color ( % __MODULE__ { color_cue: cue , major: major , final: final } ) when cue >= major do
55- final |> Blender . mix ( major ) |> Rgb . to_string ( )
65+ defp point_color ( % __MODULE__ {
66+ color_cue: cue ,
67+ major: { major , major_offset } ,
68+ final: { final , final_offset }
69+ } )
70+ when cue > major_offset do
71+ cue = mix_perces ( cue , major_offset , final_offset )
72+ final |> Blender . mix ( major , cue ) |> Rgb . to_string ( )
5673 end
74+
75+ defp mix_perces ( cue , preceeding , postceeding ) when preceeding != postceeding do
76+ ( cue - preceeding ) / ( postceeding - preceeding )
77+ end
78+
79+ defp mix_perces ( cue , _ , _ ) , do: cue
5780end
0 commit comments