Skip to content

Commit 06dc79f

Browse files
author
Mohammed Sadique
committed
element creation
1 parent 20f8abd commit 06dc79f

3 files changed

Lines changed: 54 additions & 2 deletions

File tree

lib/matplotex/figure/areal.ex

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -442,6 +442,9 @@ defmodule Matplotex.Figure.Areal do
442442
defp maybe_wrap_with_sizes(transformed, %Dataset{sizes: sizes} = dataset) when length(transformed) == length(sizes) do
443443
{Enum.zip(transformed,sizes), dataset}
444444
end
445+
defp maybe_wrap_with_sizes(transformed, %Dataset{colors: colors, marker_size: marker_size} = dataset) when length(transformed) == length(colors) do
446+
{Enum.zip(transformed,List.duplicate(marker_size,length(transformed))),dataset }
447+
end
445448
defp maybe_wrap_with_sizes(transformed, dataset) do
446449
{transformed, dataset}
447450
end

lib/matplotex/figure/areal/scatter.ex

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,14 +88,38 @@ defmodule Matplotex.Figure.Areal.Scatter do
8888
elements = elements ++ line_elements
8989
%Figure{figure | axes: %{axes | element: elements}}
9090
end
91-
9291
def capture(%Dataset{transformed: transformed} = dataset, concurrency) do
9392
if concurrency do
9493
process_concurrently(transformed, concurrency, [[], dataset])
9594
else
9695
capture(transformed, [], dataset)
9796
end
9897
end
98+
def capture([{{{x, y}, s},color}| to_capture],captured, %Dataset{
99+
marker: marker,
100+
}= dataset) do
101+
capture(
102+
to_capture,
103+
captured ++
104+
[
105+
Marker.generate_marker(marker, x, y, color, s)
106+
],
107+
dataset
108+
)
109+
end
110+
def capture([{{x, y}, s}| to_capture],captured, %Dataset{
111+
color: color,
112+
marker: marker,
113+
}= dataset) do
114+
capture(
115+
to_capture,
116+
captured ++
117+
[
118+
Marker.generate_marker(marker, x, y, color, s)
119+
],
120+
dataset
121+
)
122+
end
99123

100124
def capture(
101125
[{x, y} | to_capture],
@@ -116,6 +140,7 @@ defmodule Matplotex.Figure.Areal.Scatter do
116140
)
117141
end
118142

143+
119144
def capture(_, captured, _), do: captured
120145

121146
@impl Areal

test/matplotex/figure/areal/scatter_test.exs

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,17 @@ defmodule Matplotex.Figure.Areal.ScatterTest do
1414
assert %Figure{axes: %{data: {x, _y}, element: elements}} = Scatter.materialize(figure)
1515
assert Enum.count(elements, fn elem -> elem.type == "plot.marker" end) == length(x)
1616
end
17+
test "generates elements with various saizes if it passed a size attrbute" do
18+
x = [1,2,3,4,5]
19+
y = [10, 20, 30, 40, 50]
20+
sizes = [1, 2, 3, 4, 5]
21+
assert %Figure{axes: %{element: elements}} = x|>Matplotex.scatter(y, sizes: sizes)|>Figure.materialize()
22+
[h | tail] = elements|>Enum.filter(fn x -> x.type == "plot.marker" end)|>Enum.map(fn x ->
23+
x.r
24+
end)
25+
refute Enum.all?(tail, fn x -> x == h end)
26+
27+
end
1728
end
1829

1930
describe "generate_ticks/2" do
@@ -38,6 +49,16 @@ defmodule Matplotex.Figure.Areal.ScatterTest do
3849
assert Enum.all?(transformed, &match?({{_,_},_}, &1))
3950

4051
end
52+
test "zips transformed values with marker size if colors exist without sizes" do
53+
x = [1,2,3,4,5]
54+
y = [10, 20, 30, 40, 50]
55+
colors = [1, 2, 3, 4, 5]
56+
width = 2
57+
height = 2
58+
assert %Figure{axes: %{dataset: [%Dataset{marker_size: _marker_size} = dataset]}} = x|>Matplotex.scatter(y,figsize: {width, height}, colors: colors)
59+
assert %Dataset{transformed: transformed} = Areal.do_transform(dataset, Enum.min_max(x), Enum.min_max(y),width, height, {0,0})
60+
assert Enum.all?(transformed, &match?({{{_,_},_marker_size},_}, &1))
61+
end
4162
test "zips transformed values with colors if the dataset contanis colors" do
4263
x = [1,2,3,4,5]
4364
y = [10, 20, 30, 40, 50]
@@ -47,7 +68,7 @@ defmodule Matplotex.Figure.Areal.ScatterTest do
4768
assert %Figure{axes: %{dataset: [dataset]}} = x|>Matplotex.scatter(y,figsize: {width, height}, colors: colors)
4869
assert %Dataset{transformed: transformed} = Areal.do_transform(dataset, Enum.min_max(x), Enum.min_max(y),width, height, {0,0})
4970

50-
assert Enum.all?(transformed, &match?({{_,_},_}, &1))
71+
assert Enum.all?(transformed, &match?({{{_,_},_},_}, &1))
5172

5273
end
5374

@@ -64,5 +85,8 @@ defmodule Matplotex.Figure.Areal.ScatterTest do
6485
assert Enum.all?(transformed, &match?({{{_,_},_},_}, &1))
6586

6687
end
88+
6789
end
90+
91+
6892
end

0 commit comments

Comments
 (0)