Matplotlib Scatter and Histogram

histogram, matplotlib, python, scatter-plot

Solution

You have hit a bug in v1.2.1 (https://github.com/matplotlib/matplotlib/pull/1985). You can upgrade your matplotlib, monkey patch your version with the bug-fix, or use `np.histogram` and call `barh` with the correct order of arguments your self.

As a side note, the only code necessary for this question is:

x = np.random.rand(100)
plt.hist(x, orientation='horizontal')
plt.show()

everything else you posted is noise.

Problem

I'm trying to plot some data using Matplotlib's 2d scatterplot function while at the same time, producing projected histograms on the x and y axes. The example I've found comes right from the matplotlib image gallery (pylab_examples example code: scatter_hist.py). ``` import numpy as np import matplotlib.pyplot as plt from matplotlib.ticker import NullFormatter # the random data x = np.random.randn(1000) y = np.random.randn(1000) nullfmt = NullFormatter() # no labels # definitions for the axes left, width = 0.1, 0.65 bottom, height = 0.1, 0.65 bottom_h = left_h = left+width+0.02 rect_scatter = [left, bottom, width, height] rect_histx = [left, bottom_h, width, 0.2] rect_histy = [left_h, bottom, 0.2, height] # start with a rectangular Figure plt.figure(1, figsize=(8,8)) axScatter = plt.axes(rect_scatter) axHistx = plt.axes(rect_histx) axHisty = plt.axes(rect_histy) # no labels axHistx.xaxis.set_major_formatter(nullfmt) axHisty.yaxis.set_major_formatter(nullfmt) # the scatter plot: axScatter.scatter(x, y) # now determine nice limits by hand: binwidth = 0.25 xymax = np.max( [np.max(np.fabs(x)), np.max(np.fabs(y))] ) lim = ( int(xymax/binwidth) + 1) * binwidth axScatter.set_xlim( (-lim, lim) ) axScatter.set_ylim( (-lim, lim) ) bins = np.arange(-lim, lim + binwidth, binwidth) axHistx.hist(x, bins=bins) axHisty.hist(y, bins=bins, orientation='horizontal') axHistx.set_xlim( axScatter.get_xlim() ) axHisty.set_ylim( axScatter.get_ylim() ) plt.show() ``` The only problem is that the example doesn't work. I get the following error: ``` ~$ python ~/Desktop/scatter_and_hist.py Traceback (most recent call last): File "/Users/username/Desktop/scatter_and_hist.py", line 45, in <module> axHisty.hist(y, bins=bins, orientation='horizontal') File "//anaconda/lib/python2.7/site-packages/matplotlib/axes.py", line 8180, in hist color=c, bottom=bottom) TypeError: barh() got multiple values for keyword argument 'bottom' ``` I've gone through the code and isolated the problem. It's line #45 (axHisty.hist(y, bins=bins, orientation='horizontal')) which is causing the problem. It's so frustrating to see the plot you want in their image library, but have the example not work. A second set of eyes would be greatly appreciated!

Original source