I think you want something like this, which is creating a overload of the plotting function for a specific type you create (here exemplified with UnicodePlots):
julia> using UnicodePlots
struct Foo
x::Vector{Float64}
y::Vector{Float64}
end
Foo(x) = Foo(x,sin.(x))
plot(f::Foo) = lineplot(f.x,f.y)
plot (generic function with 1 method)
julia> f = Foo(0:pi/64:2*pi)
Foo([0.0, 0.04908738521234052, 0.09817477042468103, 0.14726215563702155, 0.19634954084936207, 0.2454369260617026, 0.2945243112740431, 0.3436116964863836, 0.39269908169872414, 0.44178646691106466 β¦ 5.841398840268521, 5.890486225480862, 5.939573610693203, 5.988660995905543, 6.037748381117884, 6.086835766330224, 6.135923151542564, 6.1850105367549055, 6.234097921967246, 6.283185307179586], [0.0, 0.049067674327418015, 0.0980171403295606, 0.14673047445536175, 0.19509032201612825, 0.24298017990326387, 0.29028467725446233, 0.33688985339222005, 0.3826834323650898, 0.4275550934302821 β¦ -0.42755509343028253, -0.3826834323650904, -0.33688985339222, -0.2902846772544625, -0.24298017990326418, -0.19509032201612872, -0.1467304744553624, -0.0980171403295605, -0.04906767432741809, -2.4492935982947064e-16])
julia> plot(f)
ββββββββββββββββββββββββββββββββββββββββββ
1 ββ β β β β β β‘€β β β β β’€β β β β β β β β β β β β β β β β β β β β β β β β β β β β β
ββ β β β β’β β β β β β β β ³β‘β β β β β β β β β β β β β β β β β β β β β β β β β β β
ββ β β β’ β β β β β β β β β β ±β‘β β β β β β β β β β β β β β β β β β β β β β β β β β
ββ β β’β β β β β β β β β β β β ±β‘β β β β β β β β β β β β β β β β β β β β β β β β β
ββ β’β β β β β β β β β β β β β β’£β β β β β β β β β β β β β β β β β β β β β β β β β
ββ β‘β β β β β β β β β β β β β β β’§β β β β β β β β β β β β β β β β β β β β β β β β
ββ£°β β β β β β β β β β β β β β β β β‘β β β β β β β β β β β β β β β β β β β β β β β
ββ §β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β Όβ‘€β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β €β’€β €β €β €β €β
ββ β β β β β β β β β β β β β β β β β β’Ήβ‘β β β β β β β β β β β β β β β’ β β β β β β
ββ β β β β β β β β β β β β β β β β β β β’£β β β β β β β β β β β β β β β‘β β β β β β
ββ β β β β β β β β β β β β β β β β β β β β’β β β β β β β β β β β β β‘β β β β β β β
ββ β β β β β β β β β β β β β β β β β β β β β’β β β β β β β β β β β‘΄β β β β β β β β
ββ β β β β β β β β β β β β β β β β β β β β β β‘β β β β β β β β β‘°β β β β β β β β β
ββ β β β β β β β β β β β β β β β β β β β β β β β’¦β β β β β β β‘΄β β β β β β β β β β
-1 ββ β β β β β β β β β β β β β β β β β β β β β β β β ³β’β£β£β‘ β β β β β β β β β β β β
ββββββββββββββββββββββββββββββββββββββββββ
β 0β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β 7β
julia>
You can also make the evaluation lazy, for example:
julia> struct Foo2{T}
r::T
end
julia> plot(f::Foo2) = lineplot(f.r,sin.(f.r))
plot (generic function with 1 method)
julia> plot(f2)
ββββββββββββββββββββββββββββββββββββββββββ
1 ββ β β β β β β‘€β β β β β’€β β β β β β β β β β β β β β β β β β β β β β β β β β β β β
ββ β β β β’β β β β β β β β ³β‘β β β β β β β β β β β β β β β β β β β β β β β β β β β
...
then the structure only stores the step range, not the actual data.