added support for gadfly linestyles... depends on gadfly PR 695
This commit is contained in:
parent
56cf25eebf
commit
fa899a67a7
@ -58,7 +58,7 @@ const examples = PlotExample[
|
|||||||
:(plot(x, y; linetypes=types, labels=map(string,types)))]),
|
:(plot(x, y; linetypes=types, labels=map(string,types)))]),
|
||||||
PlotExample("Line styles",
|
PlotExample("Line styles",
|
||||||
"",
|
"",
|
||||||
[:(styles = setdiff(supportedStyles(), [:auto])), :(plot(rand(20,length(styles)); linestyle=:auto, labels=map(string,styles)))]),
|
[:(styles = setdiff(supportedStyles(), [:auto])), :(plot(cumsum(randn(20,length(styles)),1); linestyle=:auto, labels=map(string,styles), width=5))]),
|
||||||
PlotExample("Marker types",
|
PlotExample("Marker types",
|
||||||
"",
|
"",
|
||||||
[:(markers = setdiff(supportedMarkers(), [:none,:auto])), :(scatter(0.5:9.5, [fill(i-0.5,10) for i=length(markers):-1:1]; marker=:auto, labels=map(string,markers), markersize=10))]),
|
[:(markers = setdiff(supportedMarkers(), [:none,:auto])), :(scatter(0.5:9.5, [fill(i-0.5,10) for i=length(markers):-1:1]; marker=:auto, labels=map(string,markers), markersize=10))]),
|
||||||
|
|||||||
@ -10,7 +10,7 @@ gadfly!() = plotter!(:gadfly)
|
|||||||
supportedArgs(::GadflyPackage) = setdiff(ARGS, [:heatmap_c, :fillto, :pos])
|
supportedArgs(::GadflyPackage) = setdiff(ARGS, [:heatmap_c, :fillto, :pos])
|
||||||
supportedAxes(::GadflyPackage) = setdiff(ALL_AXES, [:right])
|
supportedAxes(::GadflyPackage) = setdiff(ALL_AXES, [:right])
|
||||||
supportedTypes(::GadflyPackage) = [:none, :line, :step, :sticks, :scatter, :heatmap, :hexbin, :hist, :bar, :hline, :vline, :ohlc]
|
supportedTypes(::GadflyPackage) = [:none, :line, :step, :sticks, :scatter, :heatmap, :hexbin, :hist, :bar, :hline, :vline, :ohlc]
|
||||||
supportedStyles(::GadflyPackage) = [:auto, :solid]
|
supportedStyles(::GadflyPackage) = [:auto, :solid, :dash, :dot, :dashdot, :dashdotdot]
|
||||||
supportedMarkers(::GadflyPackage) = [:none, :auto, :rect, :ellipse, :diamond, :utriangle, :dtriangle, :cross, :xcross, :star1, :star2, :hexagon, :octagon]
|
supportedMarkers(::GadflyPackage) = [:none, :auto, :rect, :ellipse, :diamond, :utriangle, :dtriangle, :cross, :xcross, :star1, :star2, :hexagon, :octagon]
|
||||||
|
|
||||||
|
|
||||||
@ -35,7 +35,7 @@ function createGadflyPlotObject(d::Dict)
|
|||||||
unshift!(gplt.guides, Gadfly.Guide.manual_color_key("", AbstractString[], Color[]))
|
unshift!(gplt.guides, Gadfly.Guide.manual_color_key("", AbstractString[], Color[]))
|
||||||
end
|
end
|
||||||
|
|
||||||
gplt.theme = Gadfly.Theme(background_color = (haskey(d, :background_color) ? d[:background_color] : colorant"white"))
|
gplt.theme = Gadfly.Theme(background_color = d[:background_color])
|
||||||
gplt
|
gplt
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -73,27 +73,50 @@ end
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
function addGadflyFixedLines!(gplt, d::Dict)
|
function addGadflyFixedLines!(gplt, d::Dict, theme)
|
||||||
|
|
||||||
sz = d[:width] * Gadfly.px
|
sz = d[:width] * Gadfly.px
|
||||||
c = d[:color]
|
c = d[:color]
|
||||||
|
|
||||||
if d[:linetype] == :hline
|
if d[:linetype] == :hline
|
||||||
geom = Gadfly.Geom.hline(color=c, size=sz)
|
geom = Gadfly.Geom.hline(color=c, size=sz)
|
||||||
layer = Gadfly.layer(yintercept = d[:y], geom)
|
layer = Gadfly.layer(yintercept = d[:y], geom, theme)
|
||||||
else
|
else
|
||||||
geom = Gadfly.Geom.vline(color=c, size=sz)
|
geom = Gadfly.Geom.vline(color=c, size=sz)
|
||||||
layer = Gadfly.layer(xintercept = d[:y], geom)
|
layer = Gadfly.layer(xintercept = d[:y], geom, theme)
|
||||||
end
|
end
|
||||||
|
|
||||||
prepend!(gplt.layers, layer)
|
prepend!(gplt.layers, layer)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function getGadflyStrokeVector(linestyle::Symbol)
|
||||||
|
dash = 12 * Compose.mm
|
||||||
|
dot = 3 * Compose.mm
|
||||||
|
gap = 2 * Compose.mm
|
||||||
|
linestyle == :solid && return nothing
|
||||||
|
linestyle == :dash && return [dash, gap]
|
||||||
|
linestyle == :dot && return [dot, gap]
|
||||||
|
linestyle == :dashdot && return [dash, gap, dot, gap]
|
||||||
|
linestyle == :dashdotdot && return [dash, gap, dot, gap, dot, gap]
|
||||||
|
error("unsupported linestyle: ", linestyle)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function addGadflySeries!(gplt, d::Dict)
|
function addGadflySeries!(gplt, d::Dict)
|
||||||
|
|
||||||
|
gfargs = []
|
||||||
|
|
||||||
|
# set theme: color, line width, and point size
|
||||||
|
line_width = d[:width] * (d[:linetype] == :none ? 0 : 1) * Gadfly.px # 0 width when we don't show a line
|
||||||
|
line_style = getGadflyStrokeVector(d[:linestyle])
|
||||||
|
theme = Gadfly.Theme(default_color = d[:color],
|
||||||
|
line_width = line_width,
|
||||||
|
default_point_size = 0.5 * d[:markersize] * Gadfly.px,
|
||||||
|
line_style = line_style)
|
||||||
|
push!(gfargs, theme)
|
||||||
|
|
||||||
# first things first... lets so the sticks hack
|
# first things first... lets so the sticks hack
|
||||||
if d[:linetype] == :sticks
|
if d[:linetype] == :sticks
|
||||||
d, dScatter = sticksHack(;d...)
|
d, dScatter = sticksHack(;d...)
|
||||||
@ -104,20 +127,16 @@ function addGadflySeries!(gplt, d::Dict)
|
|||||||
end
|
end
|
||||||
|
|
||||||
elseif d[:linetype] in (:hline, :vline)
|
elseif d[:linetype] in (:hline, :vline)
|
||||||
addGadflyFixedLines!(gplt, d)
|
addGadflyFixedLines!(gplt, d, theme)
|
||||||
return
|
return
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
gfargs = []
|
|
||||||
|
|
||||||
# add the Geoms
|
# add the Geoms
|
||||||
append!(gfargs, getLineGeoms(d))
|
append!(gfargs, getLineGeoms(d))
|
||||||
|
|
||||||
# handle markers
|
# handle markers
|
||||||
# @show d[:y]
|
|
||||||
geoms, guides = getMarkerGeomsAndGuides(d)
|
geoms, guides = getMarkerGeomsAndGuides(d)
|
||||||
# @show d[:y]
|
|
||||||
append!(gfargs, geoms)
|
append!(gfargs, geoms)
|
||||||
append!(gplt.guides, guides)
|
append!(gplt.guides, guides)
|
||||||
|
|
||||||
@ -133,17 +152,6 @@ function addGadflySeries!(gplt, d::Dict)
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
# # if we haven't added any geoms, we're probably just going to use annotations?
|
|
||||||
# isempty(gfargs) && return
|
|
||||||
|
|
||||||
|
|
||||||
# set theme: color, line width, and point size
|
|
||||||
line_width = d[:width] * (d[:linetype] == :none ? 0 : 1) * Gadfly.px # 0 width when we don't show a line
|
|
||||||
theme = Gadfly.Theme(default_color = d[:color],
|
|
||||||
line_width = line_width,
|
|
||||||
default_point_size = 0.5 * d[:markersize] * Gadfly.px)
|
|
||||||
push!(gfargs, theme)
|
|
||||||
|
|
||||||
# for histograms, set x=y
|
# for histograms, set x=y
|
||||||
x = d[d[:linetype] == :hist ? :y : :x]
|
x = d[d[:linetype] == :hist ? :y : :x]
|
||||||
|
|
||||||
|
|||||||
@ -88,8 +88,10 @@ When plotting multiple lines, you can give every line the same trait by using th
|
|||||||
# this creates a new plot with args/kw and sets it to be the current plot
|
# this creates a new plot with args/kw and sets it to be the current plot
|
||||||
function plot(args...; kw...)
|
function plot(args...; kw...)
|
||||||
pkg = plotter()
|
pkg = plotter()
|
||||||
plt = plot(pkg; getPlotArgs(pkg, kw, 1)...) # create a new, blank plot
|
d = Dict(kw)
|
||||||
plot!(plt, args...; kw...) # add to it
|
replaceAliases!(d)
|
||||||
|
plt = plot(pkg; getPlotArgs(pkg, d, 1)...) # create a new, blank plot
|
||||||
|
plot!(plt, args...; d...) # add to it
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user