Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions lib/matplotex/colorscheme/colormap.ex
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ defmodule Matplotex.Colorscheme.Colormap do
defstruct [:color, :offset, opacity: 1]

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

def plasma do
Expand All @@ -26,16 +26,16 @@ defmodule Matplotex.Colorscheme.Colormap do

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

colors
|> Enum.with_index()
|> Enum.map(&colormap(&1, size))
|> Enum.zip(offsets)
|> Enum.map(&colormap(&1))
end

def default_cmap(), do: viridis()

defp colormap({color, idx}, size) do
offset = idx / size * 100
defp colormap({color, offset}) do
%__MODULE__{color: color, offset: offset}
end
end
41 changes: 32 additions & 9 deletions lib/matplotex/colorscheme/garner.ex
Original file line number Diff line number Diff line change
Expand Up @@ -31,27 +31,50 @@ defmodule Matplotex.Colorscheme.Garner do

defp place_edges([preceeding, minor, major, final]) do
%__MODULE__{
preceeding: preceeding.color,
minor: minor.color,
major: major.color,
final: final.color
preceeding: {preceeding.color, preceeding.offset},
minor: {minor.color, minor.offset},
major: {major.color, major.offset},
final: {final.color, final.offset}
}
end

defp place_edges(_) do
raise InputError, message: "Invalid colormap"
end

defp point_color(%__MODULE__{color_cue: cue, preceeding: preceeding, minor: minor})
when cue < minor do
defp point_color(%__MODULE__{
color_cue: cue,
preceeding: {preceeding, preceeding_offset},
minor: {minor, minor_offset}
})
when cue <= minor_offset do
cue = mix_perces(cue, preceeding_offset, minor_offset)
minor |> Blender.mix(preceeding, cue) |> Rgb.to_string()
end

defp point_color(%__MODULE__{color_cue: cue, minor: minor, major: major}) when cue < major do
defp point_color(%__MODULE__{
color_cue: cue,
minor: {minor, minor_offset},
major: {major, major_offset}
})
when cue <= major_offset do
cue = mix_perces(cue, minor_offset, major_offset)
major |> Blender.mix(minor, cue) |> Rgb.to_string()
end

defp point_color(%__MODULE__{color_cue: cue, major: major, final: final}) when cue >= major do
final |> Blender.mix(major) |> Rgb.to_string()
defp point_color(%__MODULE__{
color_cue: cue,
major: {major, major_offset},
final: {final, final_offset}
})
when cue > major_offset do
cue = mix_perces(cue, major_offset, final_offset)
final |> Blender.mix(major, cue) |> Rgb.to_string()
end

defp mix_perces(cue, preceeding, postceeding) when preceeding != postceeding do
(cue - preceeding) / (postceeding - preceeding)
end

defp mix_perces(cue, _, _), do: cue
end
2 changes: 1 addition & 1 deletion lib/matplotex/element/cmap.ex
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ defmodule Matplotex.Element.Cmap do
end

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

def color_gradient(%__MODULE__{container: container} = element) do
Expand Down
7 changes: 6 additions & 1 deletion lib/matplotex/figure/cast.ex
Original file line number Diff line number Diff line change
Expand Up @@ -557,7 +557,12 @@ defmodule Matplotex.Figure.Cast do

tick_label =
Label.cast_label(
%Label{type: "tick.cmap", x: tick_label_x, y: y_cord_tick, text: tick},
%Label{
type: "tick.cmap",
x: tick_label_x,
y: y_cord_tick,
text: format_tick_label(tick)
},
cmap_tick_font
)

Expand Down