Histogram distribution plot fails on hist, succeeds on KDE
See original GitHub issueDescribe the bug I was plotting posterior data from an InferenceData object, and the KDE worked fine. But I was interested to see more exactly what the samples looked like, so I tried plotting with a histogram instead. This errored out, with the backtrace below.
To the extent I can tell, it looks like Arviz grabbed up a multi-dimensional array (chains
x samples
x inputs
, 4 x 500 x 4) and instead of flattening it – as the KDE seems to have done – or splitting it out into four plots for the inputs
dimension), it errored out.
To Reproduce
Steps to reproduce the behavior. Ideally a self-contained snippet of code, or link to a notebook or external code. Please include screenshots/images produced with ArviZ here, or the stacktrace including arviz
code to help.
import arviz as az
idata = az.from_netcdf('/Users/rpg/Dropbox/arviz-hist-bug.nc')
az.plot_dist(idata.posterior['err_sd']) # works fine
az.plot_dist(idata.posterior['err_sd'], kind='hist') # error in np.reshape()
Expected behavior I expected to get a histogram plot, or possibly four.
Alternatively, if I was using this wrong, I would expect to get an error for the KDE case as well as the basis case.
Additional context
- Arviz version was today’s
master
. - NetCDF file to reproduce the error is here: https://www.dropbox.com/s/181nuxivbkqr8ck/arviz-hist-bug.nc?dl=0
Backtrace
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-10-c027c32088dc> in <module>
----> 1 az.plot_dist(idata.posterior['err_sd'], kind='hist')
~/src/arviz/arviz/plots/distplot.py in plot_dist(values, values2, color, kind, cumulative, label, rotated, rug, bw, quantiles, contour, fill_last, textsize, plot_kwargs, fill_kwargs, rug_kwargs, contour_kwargs, contourf_kwargs, pcolormesh_kwargs, hist_kwargs, ax, backend, backend_kwargs, show, **kwargs)
197
198 plot = get_plotting_function("plot_dist", "distplot", backend)
--> 199 ax = plot(**dist_plot_args)
200 return ax
~/src/arviz/arviz/plots/backends/matplotlib/distplot.py in plot_dist(values, values2, color, kind, cumulative, label, rotated, rug, bw, quantiles, contour, fill_last, textsize, plot_kwargs, fill_kwargs, rug_kwargs, contour_kwargs, contourf_kwargs, pcolormesh_kwargs, hist_kwargs, ax, backend_kwargs, show)
47 if kind == "hist":
48 ax = _histplot_mpl_op(
---> 49 values=values, values2=values2, rotated=rotated, ax=ax, hist_kwargs=hist_kwargs
50 )
51
~/src/arviz/arviz/plots/backends/matplotlib/distplot.py in _histplot_mpl_op(values, values2, rotated, ax, hist_kwargs)
93 bins = hist_kwargs.pop("bins")
94
---> 95 ax.hist(values, bins=bins, **hist_kwargs)
96 if rotated:
97 ax.set_yticks(bins[:-1])
~/.virtualenvs/xplan-dev-env/lib/python3.6/site-packages/matplotlib/__init__.py in inner(ax, data, *args, **kwargs)
1599 def inner(ax, *args, data=None, **kwargs):
1600 if data is None:
-> 1601 return func(ax, *map(sanitize_sequence, args), **kwargs)
1602
1603 bound = new_sig.bind(ax, *args, **kwargs)
~/.virtualenvs/xplan-dev-env/lib/python3.6/site-packages/matplotlib/axes/_axes.py in hist(self, x, bins, range, density, weights, cumulative, bottom, histtype, align, orientation, rwidth, log, color, label, stacked, normed, **kwargs)
6686 input_empty = np.size(x) == 0
6687 # Massage 'x' for processing.
-> 6688 x = cbook._reshape_2D(x, 'x')
6689 nx = len(x) # number of datasets
6690
~/.virtualenvs/xplan-dev-env/lib/python3.6/site-packages/matplotlib/cbook/__init__.py in _reshape_2D(X, name)
1428 return [np.reshape(x, -1) for x in X]
1429 else:
-> 1430 raise ValueError("{} must have 2 or fewer dimensions".format(name))
1431
1432
ValueError: x must have 2 or fewer dimensions
Issue Analytics
- State:
- Created 4 years ago
- Comments:12 (12 by maintainers)
Hi, there @OriolAbril @rpgoldman . I am new here and would like to take up this issue. I have already solved half of it locally .I would like to solve it. Will you assign me this issue please?
Ok, I will create another PR.