Hi, very nice goals! I’m personally not really interested in the scientific side, but I always love seeing nice graphics 
I (and many other people here in the forum and in the gitter/IRC chat) can also help with reviewing!
I’d suggest making a separate post asking for review, to avoid many unrelated messages about your code and “hiding” relevant reply to your “call-to-data-scientists”…
If you make a separate post, I’ll move the following
to it to cleanup this thread!
A quick look at a file led me to https://github.com/crystal-data/aquaplot/blob/1fd38eb23cf513dd7554ab3f6207a8c7ce13cd41/src/plot/base.cr where you do:
class Foo
property some_field : TheType
# ...
# Then a manual getter and setter
def get_some_field
# get the public value for @some_field
@some_field.some_internal_value
end
def set_some_field(@some_field)
end
end
This can be simplified to:
class Foo
@some_field : TheType
# ...
# Then a manual getter and setter
def some_field
# get the value for @some_field with some operation...
@some_field.some_internal_value
end
def some_field=(@some_field)
end
# or simply
setter some_field
# (the `setter` macro will roughly generate the method `some_field=` like above)
end
# Then to use in a subclass:
class Bar < Foo
def some_method
value = self.some_field # call the getter
self.some_field = value + 1 # call the setter (the method `some_field=(arg)`)
end
end
You don’t need the property
, because it is a macro that generates a getter and a setter that you don’t use, see the documentation for more info on that: https://crystal-lang.org/api/latest/Object.html#property(*names,&block)-macro
Edit:
You could even simplify more (thanks @Blacksmoke16 for pointing it out in gitter chat), using another form of the setter
macro:
class Foo
setter some_field : TheType
def some_field
@some_field.some_internal_value
end
end
The line setter some_field : TheType
will basically generate the following code:
@some_field : TheType
def some_field=(@some_field : TheType)
end
More infos in the docs: https://crystal-lang.org/api/latest/Object.html#setter(*names)-macro