From 1174ca6b1cd2eff3493af5870113697300a17dd4 Mon Sep 17 00:00:00 2001 From: Mohammed Sadique Date: Thu, 27 Feb 2025 14:13:58 +0530 Subject: [PATCH 1/2] tuning colorshceme --- lib/matplotex/colorscheme/colormap.ex | 11 +++++----- lib/matplotex/colorscheme/garner.ex | 31 +++++++++++++++++---------- lib/matplotex/element/cmap.ex | 2 +- lib/matplotex/figure/cast.ex | 2 +- 4 files changed, 27 insertions(+), 19 deletions(-) diff --git a/lib/matplotex/colorscheme/colormap.ex b/lib/matplotex/colorscheme/colormap.ex index 90f52c2..95ba8de 100644 --- a/lib/matplotex/colorscheme/colormap.ex +++ b/lib/matplotex/colorscheme/colormap.ex @@ -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 @@ -26,16 +26,15 @@ 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 diff --git a/lib/matplotex/colorscheme/garner.ex b/lib/matplotex/colorscheme/garner.ex index fa3e08b..74df3e0 100644 --- a/lib/matplotex/colorscheme/garner.ex +++ b/lib/matplotex/colorscheme/garner.ex @@ -8,7 +8,6 @@ defmodule Matplotex.Colorscheme.Garner do def garn_color({min, max} = range, point, cmap) when max != min do cue = (point - min) / (max - min) - cmap |> make_from_cmap() |> put_range(range, cue) @@ -31,10 +30,10 @@ 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 @@ -42,16 +41,26 @@ defmodule Matplotex.Colorscheme.Garner do raise InputError, message: "Invalid colormap" end - defp point_color(%__MODULE__{color_cue: cue, preceeding: preceeding, minor: minor}) - when cue < minor do - minor |> Blender.mix(preceeding, cue) |> Rgb.to_string() + 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 diff --git a/lib/matplotex/element/cmap.ex b/lib/matplotex/element/cmap.ex index ac71971..558a6a8 100644 --- a/lib/matplotex/element/cmap.ex +++ b/lib/matplotex/element/cmap.ex @@ -22,7 +22,7 @@ defmodule Matplotex.Element.Cmap do end def tag_stop(%{offset: offset, color: color, opacity: opacity}) do - ~s() + ~s() end def color_gradient(%__MODULE__{container: container} = element) do diff --git a/lib/matplotex/figure/cast.ex b/lib/matplotex/figure/cast.ex index 801eadd..bad90b8 100644 --- a/lib/matplotex/figure/cast.ex +++ b/lib/matplotex/figure/cast.ex @@ -557,7 +557,7 @@ 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 ) From 43b22569442e50e036f4ebaeb80e062ef2765176 Mon Sep 17 00:00:00 2001 From: Mohammed Sadique Date: Thu, 27 Feb 2025 14:52:33 +0530 Subject: [PATCH 2/2] format --- lib/matplotex/colorscheme/colormap.ex | 5 +++-- lib/matplotex/colorscheme/garner.ex | 32 +++++++++++++++++++-------- lib/matplotex/figure/cast.ex | 7 +++++- 3 files changed, 32 insertions(+), 12 deletions(-) diff --git a/lib/matplotex/colorscheme/colormap.ex b/lib/matplotex/colorscheme/colormap.ex index 95ba8de..91c99d6 100644 --- a/lib/matplotex/colorscheme/colormap.ex +++ b/lib/matplotex/colorscheme/colormap.ex @@ -3,7 +3,7 @@ defmodule Matplotex.Colorscheme.Colormap do defstruct [:color, :offset, opacity: 1] def viridis do - ["#FDE725","#6CCE59","#1F9E89", "#482777"] + ["#FDE725", "#6CCE59", "#1F9E89", "#482777"] end def plasma do @@ -26,7 +26,8 @@ defmodule Matplotex.Colorscheme.Colormap do def make_colormap(colors) do size = length(colors) - offsets = Nx.linspace(0, 1, n: size)|> Nx.to_list() + offsets = Nx.linspace(0, 1, n: size) |> Nx.to_list() + colors |> Enum.zip(offsets) |> Enum.map(&colormap(&1)) diff --git a/lib/matplotex/colorscheme/garner.ex b/lib/matplotex/colorscheme/garner.ex index 74df3e0..71b3887 100644 --- a/lib/matplotex/colorscheme/garner.ex +++ b/lib/matplotex/colorscheme/garner.ex @@ -8,6 +8,7 @@ defmodule Matplotex.Colorscheme.Garner do def garn_color({min, max} = range, point, cmap) when max != min do cue = (point - min) / (max - min) + cmap |> make_from_cmap() |> put_range(range, cue) @@ -41,26 +42,39 @@ defmodule Matplotex.Colorscheme.Garner do raise InputError, message: "Invalid colormap" end - defp point_color(%__MODULE__{color_cue: cue, preceeding: {preceeding,preceeding_offset}, minor: {minor, minor_offset}}) + 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() + 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, minor_offset}, major: {major, major_offset}}) when cue <= major_offset 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,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() + 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 + defp mix_perces(cue, _, _), do: cue end diff --git a/lib/matplotex/figure/cast.ex b/lib/matplotex/figure/cast.ex index bad90b8..23188e0 100644 --- a/lib/matplotex/figure/cast.ex +++ b/lib/matplotex/figure/cast.ex @@ -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: format_tick_label(tick)}, + %Label{ + type: "tick.cmap", + x: tick_label_x, + y: y_cord_tick, + text: format_tick_label(tick) + }, cmap_tick_font )