histogram2d puts NaN for 0 count; fix pyplot NaNs in heatmap; change default markersize to 4

This commit is contained in:
Thomas Breloff 2016-10-07 11:33:02 -04:00
parent 068282af55
commit a4c25321d8
3 changed files with 20 additions and 8 deletions

View File

@ -165,7 +165,7 @@ const _series_defaults = KW(
:markershape => :none, :markershape => :none,
:markercolor => :match, :markercolor => :match,
:markeralpha => nothing, :markeralpha => nothing,
:markersize => 6, :markersize => 4,
:markerstrokestyle => :solid, :markerstrokestyle => :solid,
:markerstrokewidth => 1, :markerstrokewidth => 1,
:markerstrokecolor => :match, :markerstrokecolor => :match,

View File

@ -64,7 +64,7 @@ function _initialize_backend(::PyPlotBackend)
# problem: https://github.com/tbreloff/Plots.jl/issues/308 # problem: https://github.com/tbreloff/Plots.jl/issues/308
# solution: hack from @stevengj: https://github.com/stevengj/PyPlot.jl/pull/223#issuecomment-229747768 # solution: hack from @stevengj: https://github.com/stevengj/PyPlot.jl/pull/223#issuecomment-229747768
otherdisplays = splice!(Base.Multimedia.displays, 2:length(Base.Multimedia.displays)) otherdisplays = splice!(Base.Multimedia.displays, 2:length(Base.Multimedia.displays))
import PyPlot import PyPlot, PyCall
import LaTeXStrings: latexstring import LaTeXStrings: latexstring
append!(Base.Multimedia.displays, otherdisplays) append!(Base.Multimedia.displays, otherdisplays)
@ -117,7 +117,9 @@ py_color(grad::ColorGradient) = py_color(grad.colors)
function py_colormap(grad::ColorGradient) function py_colormap(grad::ColorGradient)
pyvals = [(z, py_color(grad[z])) for z in grad.values] pyvals = [(z, py_color(grad[z])) for z in grad.values]
pycolors.LinearSegmentedColormap[:from_list]("tmp", pyvals) cm = pycolors.LinearSegmentedColormap[:from_list]("tmp", pyvals)
cm[:set_bad](color=(0,0,0,0.0), alpha=0.0)
cm
end end
py_colormap(c) = py_colormap(cgrad()) py_colormap(c) = py_colormap(cgrad())
@ -246,6 +248,12 @@ function labelfunc(scale::Symbol, backend::PyPlotBackend)
end end
end end
function py_mask_nans(z)
# PyPlot.pywrap(pynp.ma[:masked_invalid](PyPlot.pywrap(z)))
PyCall.pycall(pynp.ma[:masked_invalid], Any, z)
# pynp.ma[:masked_where](pynp.isnan(z),z)
end
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
function fix_xy_lengths!(plt::Plot{PyPlotBackend}, series::Series) function fix_xy_lengths!(plt::Plot{PyPlotBackend}, series::Series)
@ -730,12 +738,11 @@ function py_add_series(plt::Plot{PyPlotBackend}, series::Series)
end end
clims = sp[:clims] clims = sp[:clims]
if is_2tuple(clims) zmin, zmax = extrema(z)
isfinite(clims[1]) && (extrakw[:vmin] = clims[1]) extrakw[:vmin] = (is_2tuple(clims) && isfinite(clims[1])) ? clims[1] : zmin
isfinite(clims[2]) && (extrakw[:vmax] = clims[2]) extrakw[:vmax] = (is_2tuple(clims) && isfinite(clims[2])) ? clims[2] : zmax
end
handle = ax[:pcolormesh](x, y, z; handle = ax[:pcolormesh](x, y, py_mask_nans(z);
label = series[:label], label = series[:label],
zorder = series[:series_plotindex], zorder = series[:series_plotindex],
cmap = py_fillcolormap(series), cmap = py_fillcolormap(series),

View File

@ -511,6 +511,11 @@ centers(v::AVec) = 0.5 * (v[1:end-1] + v[2:end])
xedges, yedges, counts = my_hist_2d(x, y, d[:bins], xedges, yedges, counts = my_hist_2d(x, y, d[:bins],
normed = d[:normalize], normed = d[:normalize],
weights = d[:weights]) weights = d[:weights])
for (i,c) in enumerate(counts)
if c == 0
counts[i] = NaN
end
end
x := centers(xedges) x := centers(xedges)
y := centers(yedges) y := centers(yedges)
z := Surface(counts) z := Surface(counts)