working on plotly

This commit is contained in:
Thomas Breloff 2015-11-20 23:24:38 -05:00
parent 92ec093ed9
commit b0c9dd44e9
4 changed files with 74 additions and 44 deletions

View File

@ -1,12 +1,12 @@
# https://github.com/bokeh/Bokeh.jl # https://github.com/bokeh/Bokeh.jl
make255(x) = round(Int, 255 * x) # make255(x) = round(Int, 255 * x)
function bokehcolor(c::Colorant) # function bokehcolor(c::Colorant)
@sprintf("rgba(%d, %d, %d, %1.3f)", [make255(f(c)) for f in [red,green,blue]]..., alpha(c)) # @sprintf("rgba(%d, %d, %d, %1.3f)", [make255(f(c)) for f in [red,green,blue]]..., alpha(c))
end # end
bokehcolor(cs::ColorScheme) = bokehcolor(getColor(cs)) # bokehcolor(cs::ColorScheme) = bokehcolor(getColor(cs))
const _glyphtypes = Dict( const _glyphtypes = Dict(
@ -88,9 +88,9 @@ function _add_series(::BokehPackage, plt::Plot; kw...)
glyph = Bokeh.Bokehjs.Glyph( glyph = Bokeh.Bokehjs.Glyph(
glyphtype = bokeh_glyph_type(d), glyphtype = bokeh_glyph_type(d),
linecolor = bokehcolor(d[:linecolor]), # shape's stroke or line color linecolor = webcolor(d[:linecolor]), # shape's stroke or line color
linewidth = d[:linewidth], # shape's stroke width or line width linewidth = d[:linewidth], # shape's stroke width or line width
fillcolor = bokehcolor(d[:markercolor]), fillcolor = webcolor(d[:markercolor]),
size = ceil(Int, d[:markersize] * 2.5), # magic number 2.5 to keep in same scale as other backends size = ceil(Int, d[:markersize] * 2.5), # magic number 2.5 to keep in same scale as other backends
dash = get_stroke_vector(d[:linestyle]) dash = get_stroke_vector(d[:linestyle])
) )

View File

@ -68,13 +68,7 @@ end
# ---------------------------------------------------------------- # ----------------------------------------------------------------
# _plotDefaults[:title] = ""
# _plotDefaults[:xlabel] = ""
# _plotDefaults[:ylabel] = ""
# _plotDefaults[:yrightlabel] = "" # _plotDefaults[:yrightlabel] = ""
# _plotDefaults[:legend] = true
# _plotDefaults[:background_color] = colorant"white"
# _plotDefaults[:foreground_color] = :auto
# _plotDefaults[:xlims] = :auto # _plotDefaults[:xlims] = :auto
# _plotDefaults[:ylims] = :auto # _plotDefaults[:ylims] = :auto
# _plotDefaults[:xticks] = :auto # _plotDefaults[:xticks] = :auto
@ -83,36 +77,71 @@ end
# _plotDefaults[:yscale] = :identity # _plotDefaults[:yscale] = :identity
# _plotDefaults[:xflip] = false # _plotDefaults[:xflip] = false
# _plotDefaults[:yflip] = false # _plotDefaults[:yflip] = false
# _plotDefaults[:size] = (600,400)
# _plotDefaults[:pos] = (0,0)
# _plotDefaults[:windowtitle] = "Plots.jl"
# _plotDefaults[:show] = false
# _plotDefaults[:layout] = nothing
# _plotDefaults[:n] = -1
# _plotDefaults[:nr] = -1
# _plotDefaults[:nc] = -1
# _plotDefaults[:color_palette] = :auto
# _plotDefaults[:link] = false
# _plotDefaults[:linkx] = false
# _plotDefaults[:linky] = false
# _plotDefaults[:linkfunc] = nothing
# _plotDefaults[:tickfont] = font(8)
# _plotDefaults[:guidefont] = font(11)
# _plotDefaults[:legendfont] = font(8)
# _plotDefaults[:grid] = true
function plotlyfont(font::Font)
Dict(
:family => font.family,
:size => font.pointsize,
:color => font.color,
)
end
function plotlyscale(scale::Symbol)
if scale == :log
"log"
else
"-"
end
end
function get_plot_html(plt::Plot{PlotlyPackage}) function get_plot_html(plt::Plot{PlotlyPackage})
d = plt.plotargs d = plt.plotargs
d_out = Dict() d_out = Dict()
bgcolor = webcolor(d[:background_color])
fgcolor = webcolor(d[:foreground_color])
# TODO: set the fields for the plot # TODO: set the fields for the plot
d_out[:title] = d[:title] d_out[:title] = d[:title]
d_out[:width], d_out[:height] = d[:size]
# d_out[:margin] = 0
d_out[:showlegend] = d[:legend]
d_out[:paper_bgcolor] = d_out[:plot_bgcolor] = plotlycolor(d[:background_color])
d_out[:titlefont] = plotlyfont(d[:guidefont]) d_out[:titlefont] = plotlyfont(d[:guidefont])
d_out[:width], d_out[:height] = d[:size]
d_out[:margin] = Dict(:l=>20, :b=>20, :r=>10, :t=>10)
d_out[:paper_bgcolor] = bgcolor
d_out[:plot_bgcolor] = bgcolor
# TODO: x/y axis tick values/labels
# TODO: x/y axis range
d_out[:xaxis] = Dict(
:title => d[:xlabel],
:titlefont => plotlyfont(d[:guidefont]),
:type => plotlyscale(d[:xscale]),
:tickfont => plotlyfont(d[:tickfont]),
:tickcolor => fgcolor,
:linecolor => fgcolor,
:showgrid => d[:grid],
)
d_out[:yaxis] = Dict(
:title => d[:ylabel],
:titlefont => plotlyfont(d[:guidefont]),
:type => plotlyscale(d[:yscale]),
:tickfont => plotlyfont(d[:tickfont]),
:tickcolor => fgcolor,
:linecolor => fgcolor,
:showgrid => d[:grid],
)
d_out[:showlegend] = d[:legend]
if d[:legend]
d_out[:legend] = Dict(
:bgcolor => bgcolor,
:bordercolor => fgcolor,
:font => plotlyfont(d[:legendfont]),
:yanchor => "middle",
)
end
# TODO: d_out[:annotations]
JSON.json(d_out) JSON.json(d_out)
end end
@ -167,14 +196,6 @@ end
function html_body(plt::Plot{PlotlyPackage}) function html_body(plt::Plot{PlotlyPackage})
w, h = plt.plotargs[:size] w, h = plt.plotargs[:size]
# # TODO: get the real ones
# seriesargs = [Dict(:x => collect(1:5), :y => rand(5))]
# plotargs = Dict(:margin => 0)
# series_html = JSON.json(seriesargs)
# plot_html = JSON.json(plotargs)
""" """
<div id=\"myplot\" style=\"width:$(w)px;height:$(h)px;\"></div> <div id=\"myplot\" style=\"width:$(w)px;height:$(h)px;\"></div>
<script> <script>

View File

@ -19,8 +19,7 @@ using JSON
# """ # """
function standalone_html(plt::PlottingObject; title::AbstractString = "Plots.jl ($(backend_name(plt.backend)))") function standalone_html(plt::PlottingObject; title::AbstractString = get(plt.plotargs, :window_title, "Plots.jl"))
# render(_html_template, title = title, body = html_body(plt), head = html_head(plt))
""" """
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>

View File

@ -325,6 +325,16 @@ end
# ---------------------------------------------------------------------------------- # ----------------------------------------------------------------------------------
make255(x) = round(Int, 255 * x)
function webcolor(c::Colorant)
@sprintf("rgba(%d, %d, %d, %1.3f)", [make255(f(c)) for f in [red,green,blue]]..., alpha(c))
end
webcolor(cs::ColorScheme) = webcolor(getColor(cs))
# ----------------------------------------------------------------------------------
# TODO: allow the setting of the algorithm, either by passing a symbol (:colordiff, :fixed, etc) or a function? # TODO: allow the setting of the algorithm, either by passing a symbol (:colordiff, :fixed, etc) or a function?
# function getBackgroundRGBColor(c, d::Dict) # function getBackgroundRGBColor(c, d::Dict)