diff --git a/src/backends/plotly.jl b/src/backends/plotly.jl
index 6839dc4e..0d39c424 100644
--- a/src/backends/plotly.jl
+++ b/src/backends/plotly.jl
@@ -336,7 +336,7 @@ function plotly_layout(plt::Plot)
plotattributes_out[:hovermode] = "none"
end
- plotattributes_out
+ plotattributes_out = recursive_merge(plotattributes_out, plt.attr[:extra_plot_kwargs])
end
function plotly_layout_json(plt::Plot)
@@ -810,9 +810,14 @@ html_body(plt::Plot{PlotlyBackend}) = plotly_html_body(plt)
const ijulia_initialized = Ref(false)
function plotly_html_head(plt::Plot)
- local_file = ("file://" * plotly_local_file_path)
+ local_file = ("file:///" * plotly_local_file_path)
plotly =
use_local_dependencies[] ? local_file : "https://cdn.plot.ly/plotly-latest.min.js"
+
+ include_mathjax = get(plt[:extra_plot_kwargs], :include_mathjax, "")
+ mathjax_file = include_mathjax != "cdn" ? ("file://" * include_mathjax) : "https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/MathJax.js?config=TeX-MML-AM_CHTML"
+ mathjax_head = include_mathjax == "" ? "" : "\n\t\t"
+
if isijulia() && !ijulia_initialized[]
# using requirejs seems to be key to load a js depency in IJulia!
# https://requirejs.org/docs/start.html
@@ -826,7 +831,7 @@ function plotly_html_head(plt::Plot)
""")
ijulia_initialized[] = true
end
- return ""
+ return "$mathjax_head"
end
function plotly_html_body(plt, style = nothing)
diff --git a/src/utils.jl b/src/utils.jl
index d24ed3a7..5bc022d4 100644
--- a/src/utils.jl
+++ b/src/utils.jl
@@ -302,6 +302,11 @@ Base.convert(::Type{Vector{T}}, rng::AbstractRange{S}) where {T<:Real,S<:Real} =
Base.merge(a::AbstractVector, b::AbstractVector) = sort(unique(vcat(a,b)))
+# recursively merge kw-dicts, e.g. for merging extra_kwargs / extra_plot_kwargs in plotly)
+recursive_merge(x::AbstractDict...) = merge(recursive_merge, x...)
+# if values are not AbstractDicts, take the last definition (as does merge)
+recursive_merge(x...) = x[end]
+
nanpush!(a::AbstractVector, b) = (push!(a, NaN); push!(a, b))
nanappend!(a::AbstractVector, b) = (push!(a, NaN); append!(a, b))