11defmodule Matplotex.Figure.Areal.Spline do
2+ alias Matplotex.Element.Spline
3+ alias Matplotex.Figure.RcParams
24 alias Matplotex.Figure.Areal
35 alias Matplotex.Figure.Dataset
46 alias Matplotex.Figure.Areal.PlotOptions
@@ -27,6 +29,7 @@ defmodule Matplotex.Figure.Areal.Spline do
2729 ) do
2830 x = determine_numeric_value ( x )
2931 y = determine_numeric_value ( y )
32+ opts = Keyword . put_new ( opts , :color , "none" )
3033 dataset = Dataset . cast ( % Dataset { x: x , y: y } , opts )
3134 datasets = data ++ [ dataset ]
3235 xydata = flatten_for_data ( datasets )
@@ -54,12 +57,12 @@ defmodule Matplotex.Figure.Areal.Spline do
5457 } ,
5558 element: elements
5659 } = axes ,
57- rc_params: % RcParams { x_padding: x_padding , y_padding: y_padding } } ) do
60+ rc_params: % RcParams { x_padding: x_padding , y_padding: y_padding } } = figure ) do
5861 x_padding_value = width_region_content * x_padding
5962 y_padding_value = height_region_content * y_padding
6063 shrinked_width_region_content = width_region_content - x_padding_value * 2
6164 shrinked_height_region_content = height_region_content - y_padding_value * 2
62-
65+ transition = { x_region_content + x_padding_value , y_region_content + y_padding_value }
6366 line_elements =
6467 data
6568 |> Enum . map ( fn dataset ->
@@ -69,9 +72,9 @@ defmodule Matplotex.Figure.Areal.Spline do
6972 ylim ,
7073 shrinked_width_region_content ,
7174 shrinked_height_region_content ,
72- { x_region_content + x_padding_value , y_region_content + y_padding_value }
75+ transition
7376 )
74- |> capture ( )
77+ |> capture ( transition )
7578 end )
7679 |> List . flatten ( )
7780
@@ -81,50 +84,18 @@ defmodule Matplotex.Figure.Areal.Spline do
8184 end
8285
8386
84- defp capture ( % Dataset { transformed: transformed } = dataset ) do
85- capture ( transformed , [ ] , dataset )
86- end
87-
88-
89- defp capture ( % Dataset { transformed: transformed } = dataset , bly , region_width ) do
90- capture ( transformed , [ ] , dataset , bly , region_width )
91- end
9287
93- defp capture (
94- [ { x , y } | to_capture ] ,
95- captured ,
96- % Dataset {
97- color: color ,
98- x: bins ,
99- pos: pos_factor ,
100- edge_color: edge_color ,
101- alpha: alpha
102- } = dataset ,
103- bly ,
104- region_width
105- ) do
106- capture (
107- to_capture ,
108- captured ++
109- [
110- % Rect {
111- type: "figure.histogram" ,
112- x: bin_position ( x , pos_factor ) ,
113- y: y ,
114- width: region_width / length ( bins ) ,
115- height: bly - y ,
116- color: color ,
117- stroke: edge_color ,
118- fill_opacity: alpha ,
119- stroke_opacity: alpha
120- }
121- ] ,
122- dataset ,
123- bly ,
124- region_width
125- )
88+ defp capture ( % Dataset { transformed: transformed , color: color , edge_color: edge_color , line_width: stroke_width } , move_to_def ) do
89+ { moveto , transformed } = List . pop_at ( transformed , 0 , move_to_def )
90+ cubic = Enum . slice ( transformed , 0 .. 2 )
91+ smooths = blend ( transformed , 3 )
92+ % Spline { type: "figure.spline" , moveto: moveto , cubic: cubic , smooths: smooths , fill: color , stroke: edge_color , stroke_width: stroke_width }
12693 end
12794
128- defp capture ( [ ] , captured , _dataset , _bly , _region_width ) , do: captured
95+ defp blend ( smooths , start_from ) do
96+ smooths
97+ |> Enum . slice ( start_from .. - 1 // 1 )
98+ |> Enum . chunk_every ( 2 )
12999
100+ end
130101end
0 commit comments