Skip to content

Commit 555d8bc

Browse files
Merge pull request #53 from BigThinkcode/colorsscheme_opt
Color scheme and garning
2 parents c5935ef + 43b2256 commit 555d8bc

File tree

4 files changed

+44
-16
lines changed

4 files changed

+44
-16
lines changed

lib/matplotex/colorscheme/colormap.ex

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ defmodule Matplotex.Colorscheme.Colormap do
33
defstruct [:color, :offset, opacity: 1]
44

55
def viridis do
6-
["#fde725", "#21918c", "#3b528b", "#440154"]
6+
["#FDE725", "#6CCE59", "#1F9E89", "#482777"]
77
end
88

99
def plasma do
@@ -26,16 +26,16 @@ defmodule Matplotex.Colorscheme.Colormap do
2626

2727
def make_colormap(colors) do
2828
size = length(colors)
29+
offsets = Nx.linspace(0, 1, n: size) |> Nx.to_list()
2930

3031
colors
31-
|> Enum.with_index()
32-
|> Enum.map(&colormap(&1, size))
32+
|> Enum.zip(offsets)
33+
|> Enum.map(&colormap(&1))
3334
end
3435

3536
def default_cmap(), do: viridis()
3637

37-
defp colormap({color, idx}, size) do
38-
offset = idx / size * 100
38+
defp colormap({color, offset}) do
3939
%__MODULE__{color: color, offset: offset}
4040
end
4141
end

lib/matplotex/colorscheme/garner.ex

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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
5780
end

lib/matplotex/element/cmap.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ defmodule Matplotex.Element.Cmap do
2222
end
2323

2424
def tag_stop(%{offset: offset, color: color, opacity: opacity}) do
25-
~s(<stop offset="#{offset}%" style="stop-color:#{color};stop-opacity:#{opacity}" />)
25+
~s(<stop offset="#{offset * 100}%" style="stop-color:#{color};stop-opacity:#{opacity}" />)
2626
end
2727

2828
def color_gradient(%__MODULE__{container: container} = element) do

lib/matplotex/figure/cast.ex

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -557,7 +557,12 @@ defmodule Matplotex.Figure.Cast do
557557

558558
tick_label =
559559
Label.cast_label(
560-
%Label{type: "tick.cmap", x: tick_label_x, y: y_cord_tick, text: tick},
560+
%Label{
561+
type: "tick.cmap",
562+
x: tick_label_x,
563+
y: y_cord_tick,
564+
text: format_tick_label(tick)
565+
},
561566
cmap_tick_font
562567
)
563568

0 commit comments

Comments
 (0)