Content-Type: multipart/related; type="text/html"; boundary=Apple-Mail-18-547099843 --Apple-Mail-18-547099843 Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=us-ascii
On Thu, Sep 30, 2010 at 8:44 = PM, Tony S Yu <tsyu80@gmail.com> = wrote:
I'd like to make something in between a box plot [1] and a histogram. = Each histogram would be represented by a single, tall, rectangular patch = (like the box in a box plot), and the patch would be subdivided by the = bin edges of the histogram. The face color of each sub-patch would = replace the bar height in the histogram.

If any of that actually made sense:

* Does this type of plot have a name?

* Is there an easy way to do this in Matplotlib?

* If there isn't an easy way, what would be a good starting point? = Initial ideas: 1) Use pcolor or imshow and embed this axes in a larger = axes, 2) represent the sub-patches as a PolyCollection.

Thoughts?
-Tony

[1] e.g. http://matplotlib.sourceforge.net/examples/pylab_example= s/boxplot_demo.html

Tony,

I am not quite sure I understand. =  

[snip]

Or maybe = something else in the gallery is more like what you want:

http://matplotlib.= sourceforge.net/gallery.html

Ben Root


I've checked the gallery, but I don't = see anything that appears similar. In any case, I ended up hacking = together something that works. I've attached an image of what I had in = mind (created with the code at the very bottom of this = reply).

I ended up using mpl Rectangle objects and = stringing them together using a PatchCollection. Maybe there's a more = efficient way to do this, but this approach worked = well-enough.

Best,
-Tony

"""
First attempt at a histogram = strip chart (made up name).

if-main block taken = from [1] except that I've replaced uniform distributions
with = normal distributions.

[1] http://matplotlib.sourceforge.net/examples/pylab_examples/boxp= lot_demo3.html
"""

impor= t numpy as np
import matplotlib.pyplot as plt
from = matplotlib import = collections


NORM_TYPES =3D = dict(max=3Dmax, sum=3Dsum)

class = BinCollection(collections.PatchCollection):

 = ;   def __init__(self, hist, bin_edges, x=3D0, width=3D1, = cmap=3Dplt.cm.gray_r, 
         =         norm_type=3D'max', = **kwargs):
        yy =3D = (bin_edges[:-1] + bin_edges[1:])/2.
       =  heights =3D np.diff(bin_edges)
     =    bins =3D [plt.Rectangle((x, y), width, h) for y, h in = zip(yy, heights)]
        norm =3D = NORM_TYPES[norm_type]
        fc =3D = cmap(np.asarray(hist, dtype=3Dfloat)/norm(hist))
   =      super(BinCollection, self).__init__(bins, = facecolors=3Dfc, **kwargs)

def histstrip(x, = positions=3DNone, widths=3DNone, ax=3DNone):
   =  if ax is None:
        ax =3D = plt.gca()
    if positions is = None:
        positions =3D range(1, = len(x) + 1)
    if widths is = None:
        widths =3D = np.min(np.diff(positions)) / 2. * = np.ones(len(positions))
    for data, x_pos, w = in zip(x, positions, widths):
       =  x_pos -=3D w/2.
        hist, = bin_edges =3D np.histogram(data)
       =  bins =3D BinCollection(hist, bin_edges, width=3Dw, = x=3Dx_pos)
       =  ax.add_collection(bins, autolim=3DTrue)
   =  ax.set_xticks(positions)
   =  ax.autoscale_view()

if __name__ =3D=3D = '__main__':
    import matplotlib.pyplot as = plt
    import numpy as = np

   =  np.random.seed(2)
    inc =3D = 0.1
    e1 =3D np.random.normal(0,1, = size=3D(500,))
    e2 =3D np.random.normal(0,1, = size=3D(500,))
    e3 =3D np.random.normal(0,1 = + inc, size=3D(500,))
    e4 =3D = np.random.normal(0,1 + 2*inc, = size=3D(500,))

    treatments =3D = [e1,e2,e3,e4]

    fig, ax =3D = plt.subplots()
    pos =3D = np.array(range(len(treatments)))+1

   =  histstrip(treatments, ax=3Dax)
   =  ax.set_xlabel('treatment')
   =  ax.set_ylabel('response')
   =  fig.subplots_adjust(right=3D0.99,top=3D0.99)
   =  plt.show()

= --Apple-Mail-18-547099843 Content-Transfer-Encoding: base64 Content-Disposition: inline; filename=hist_strip.png Content-Type: image/png; x-unix-mode=0644; name="hist_strip.png" Content-Id: <1F7CA163-FC20-414F-89AD-6FF560ACEF7B@hsd1.ma.comcast.net.> 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 AABJRU5ErkJggg== --Apple-Mail-18-547099843--