@@ -78,14 +78,29 @@ defmodule Matplotex.Figure.Lead do
7878 end
7979
8080 defp maybe_generate_ticks ( ticks , limit , data , number_of_ticks ) do
81- if is_nil ( ticks ) || length ( ticks ) < 3 do
82- generate_ticks ( limit , data , ceil ( number_of_ticks ) )
83- else
84- { ticks , limit }
81+ cond do
82+ is_nil ( ticks ) || length ( ticks ) < 3 ->
83+ generate_ticks ( limit , data , ceil ( number_of_ticks ) )
84+
85+ is_nil ( limit ) ->
86+ { ticks , generate_limit ( data ) }
87+
88+ true ->
89+ { ticks , limit }
8590 end
8691 end
8792
8893 defp generate_ticks ( nil , data , number_of_ticks ) do
94+ data
95+ |> generate_limit ( )
96+ |> generate_ticks ( data , number_of_ticks )
97+ end
98+
99+ defp generate_ticks ( { lower_limit , upper_limit } = lim , _data , number_of_ticks ) do
100+ { lower_limit |> Nx . linspace ( upper_limit , n: number_of_ticks ) |> Nx . to_list ( ) , lim }
101+ end
102+
103+ defp generate_limit ( data ) do
89104 { min , upper_limit } = Enum . min_max ( data )
90105
91106 lower_limit =
@@ -95,11 +110,7 @@ defmodule Matplotex.Figure.Lead do
95110 0
96111 end
97112
98- generate_ticks ( { lower_limit , upper_limit } , data , number_of_ticks )
99- end
100-
101- defp generate_ticks ( { lower_limit , upper_limit } = lim , _data , number_of_ticks ) do
102- { lower_limit |> Nx . linspace ( upper_limit , n: number_of_ticks ) |> Nx . to_list ( ) , lim }
113+ { lower_limit , upper_limit }
103114 end
104115
105116 defp set_region_xy (
@@ -124,6 +135,7 @@ defmodule Matplotex.Figure.Lead do
124135 ) do
125136 space_for_ylabel = height_required_for_text ( y_label_font , y_label )
126137 y_tick = Enum . max_by ( y_ticks , & tick_length ( & 1 ) )
138+
127139 space_for_yticks = length_required_for_text ( y_tick_font , y_tick )
128140
129141 space_required_for_region_y =
@@ -352,8 +364,11 @@ defmodule Matplotex.Figure.Lead do
352364 rotation: 0
353365 } ,
354366 text
355- ) ,
356- do: tick_length ( text ) * to_number ( font_size ) * ( pt_to_inch_ratio / 2 ) + flate
367+ ) do
368+ text_size = tick_length ( text ) * to_number ( font_size ) * ( pt_to_inch_ratio / 2 )
369+ offset_for_text_length = 1 / tick_length ( text ) * ( pt_to_inch_ratio / 2 ) * to_number ( font_size )
370+ text_size + offset_for_text_length + flate
371+ end
357372
358373 def length_required_for_text (
359374 % Font {
0 commit comments