more shape fun... completed gadfly's set

This commit is contained in:
Thomas Breloff 2015-09-17 16:18:48 -04:00
parent 168b77326b
commit c4596dda75
3 changed files with 88 additions and 10 deletions

View File

@ -11,7 +11,7 @@ supportedArgs(::GadflyPackage) = setdiff(ARGS, [:heatmap_c, :fillto, :pos])
supportedAxes(::GadflyPackage) = setdiff(ALL_AXES, [:right])
supportedTypes(::GadflyPackage) = [:none, :line, :step, :sticks, :scatter, :heatmap, :hexbin, :hist, :bar, :hline, :vline, :ohlc]
supportedStyles(::GadflyPackage) = [:auto, :solid]
supportedMarkers(::GadflyPackage) = [:none, :auto, :rect, :ellipse, :diamond, :utriangle, :dtriangle, :cross, :xcross]
supportedMarkers(::GadflyPackage) = [:none, :auto, :rect, :ellipse, :diamond, :utriangle, :dtriangle, :cross, :xcross, :star1, :star2, :hexagon]
include("gadfly_shapes.jl")

View File

@ -34,6 +34,15 @@ function createGadflyAnnotation(d::Dict)
elseif marker == :xcross
shape = xcross(x, y, sz)
elseif marker == :star1
shape = star1(x, y, sz)
elseif marker == :star2
shape = star2(x, y, sz)
elseif marker == :hexagon
shape = hexagon(x, y, sz)
else
# make circles
sz = 0.8 * d[:markersize] * Gadfly.px
@ -48,7 +57,6 @@ end
function square(xs::AbstractArray, ys::AbstractArray, rs::AbstractArray)
n = max(length(xs), length(ys), length(rs))
rect_xs = Vector{Compose.Measure}(n)
rect_ys = Vector{Compose.Measure}(n)
rect_ws = Vector{Compose.Measure}(n)
@ -69,7 +77,6 @@ end
function diamond(xs::AbstractArray, ys::AbstractArray, rs::AbstractArray)
n = max(length(xs), length(ys), length(rs))
polys = Vector{Vector{Tuple{Compose.Measure, Compose.Measure}}}(n)
for i in 1:n
x = Compose.x_measure(xs[mod1(i, length(xs))])
@ -85,7 +92,6 @@ end
function cross(xs::AbstractArray, ys::AbstractArray, rs::AbstractArray)
n = max(length(xs), length(ys), length(rs))
polys = Vector{Vector{Tuple{Compose.Measure, Compose.Measure}}}(n)
for i in 1:n
x = Compose.x_measure(xs[mod1(i, length(xs))])
@ -111,7 +117,6 @@ end
function xcross(xs::AbstractArray, ys::AbstractArray, rs::AbstractArray)
n = max(length(xs), length(ys), length(rs))
polys = Vector{Vector{Tuple{Compose.Measure, Compose.Measure}}}(n)
s = 1/sqrt(5)
for i in 1:n
@ -133,7 +138,6 @@ end
function utriangle(xs::AbstractArray, ys::AbstractArray, rs::AbstractArray, scalar = 1)
n = max(length(xs), length(ys), length(rs))
polys = Vector{Vector{Tuple{Compose.Measure, Compose.Measure}}}(n)
s = 0.8
for i in 1:n
@ -142,9 +146,9 @@ function utriangle(xs::AbstractArray, ys::AbstractArray, rs::AbstractArray, scal
r = rs[mod1(i, length(rs))]
u = 0.8 * scalar * r
polys[i] = Tuple{Compose.Measure, Compose.Measure}[
(x - r, y + u),
(x + r, y + u),
(x, y - u)
(x - r, y + u),
(x + r, y + u),
(x, y - u)
]
end
@ -153,6 +157,78 @@ end
function star1(xs::AbstractArray, ys::AbstractArray, rs::AbstractArray, scalar = 1)
n = max(length(xs), length(ys), length(rs))
polys = Vector{Vector{Tuple{Compose.Measure, Compose.Measure}}}(n)
# some magic scalars
sx = 0.7
sy1, sy2 = 1.2, 0.4
for i in 1:n
x = Compose.x_measure(xs[mod1(i, length(xs))])
y = Compose.y_measure(ys[mod1(i, length(ys))])
r = rs[mod1(i, length(rs))]
polys[i] = Tuple{Compose.Measure, Compose.Measure}[
(x-sx*r, y+r), # BL
(x, y-sy1*r), # T
(x+sx*r, y+r), # BR
(x-r, y-sy2*r), # L
(x+r, y-sy2*r) # R
]
end
return Gadfly.polygon(polys)
end
function star2(xs::AbstractArray, ys::AbstractArray, rs::AbstractArray, scalar = 1)
n = max(length(xs), length(ys), length(rs))
polys = Vector{Vector{Tuple{Compose.Measure, Compose.Measure}}}(n)
for i in 1:n
x = Compose.x_measure(xs[mod1(i, length(xs))])
y = Compose.y_measure(ys[mod1(i, length(ys))])
r = rs[mod1(i, length(rs))]
u = 0.4r
polys[i] = Tuple{Compose.Measure, Compose.Measure}[
(x-u, y), (x-r, y-r), # TL
(x, y-u), (x+r, y-r), # TR
(x+u, y), (x+r, y+r), # BR
(x, y+u), (x-r, y+r) # BL
]
end
return Gadfly.polygon(polys)
end
function hexagon(xs::AbstractArray, ys::AbstractArray, rs::AbstractArray)
n = max(length(xs), length(ys), length(rs))
polys = Vector{Vector{Tuple{Compose.Measure, Compose.Measure}}}(n)
for i in 1:n
x = Compose.x_measure(xs[mod1(i, length(xs))])
y = Compose.y_measure(ys[mod1(i, length(ys))])
r = rs[mod1(i, length(rs))]
u = 0.4r
# make a "plus sign"
polys[i] = Tuple{Compose.Measure, Compose.Measure}[
(x-r, y-u), (x-r, y+u), # L edge
# (x-u, y+u), # BL inside
(x-u, y+r), (x+u, y+r), # B edge
# (x+u, y+u), # BR inside
(x+r, y+u), (x+r, y-u), # R edge
# (x+u, y-u), # TR inside
(x+u, y-r), (x-u, y-r), # T edge
# (x-u, y-u) # TL inside
]
end
return Gadfly.polygon(polys)
end
# ---------------------------

View File

@ -18,7 +18,9 @@ function adjustQwtKeywords(iscreating::Bool; kw...)
d[:linetype] = :heatmap
elseif d[:linetype] == :scatter
d[:linetype] = :none
d[:marker] = :ellipse
if d[:marker] == :none
d[:marker] = :ellipse
end
elseif !iscreating && d[:linetype] == :bar
return barHack(; kw...)
elseif !iscreating && d[:linetype] == :hist