On Friday, June 20, 2014 2:47:03 PM UTC+1, Jason Swails wrote:
> On Fri, Jun 20, 2014 at 4:10 AM, Jamie Mitchell <jamiemit...@gmail.com> wrote:
> 
> Hi folks,
> 
> 
> 
> Instead of colouring the entire bar of a histogram i.e. filling it, I would 
> like to colour just the outline of the histogram. Does anyone know how to do 
> this?
> 
> Version - Python2.7
> 
> 
> 
> Look at the matplotlib.pyplot.hist function documentation: 
> http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.hist
> 
> 
> 
> In addition to the listed parameters, you'll see the "Other Parameters" taken 
> are those that can be applied to the created Patch objects (which are the 
> actual rectangles).  For the Patch keywords, see the API documentation on the 
> Patch object 
> (http://matplotlib.org/api/artist_api.html#matplotlib.patches.Patch). So you 
> can do one of two things:
> 
> 
> 
> 1) Pass the necessary Patch keywords to effect what you want
> 
> 
> 
> e.g. (untested):
> import matplotlib.pyplot as plt
> 
> 
> 
> plt.hist(dataset, bins=10, range=(-5, 5), normed=True,
>          edgecolor='b', linewidth=2, facecolor='none', # Patch options
> 
> )
> 
> 
> plt.show()
> 
> 
> 
> 2) Iterate over the Patch instances returned by plt.hist() and set the 
> properties you want.
> 
> 
> 
> e.g. (untested):
> import matplotlib.pyplot as plt
> 
> 
> 
> n, bins, patches = plt.hist(dataset, bins=10, range=(-5, 5), normed=True)
> for patch in patches:
> 
>     patch.set_edgecolor('b') # color of the lines around each bin
>     patch.set_linewidth(2) # Set width of bin edge
> 
>     patch.set_facecolor('none') # set no fill
>     # Anything else you want to do
> 
> 
> 
> plt.show()
> 
> 
> Approach (1) is the "easy" way, and is there to satisfy the majority of use 
> cases.  However, approach (2) is _much_ more flexible.  Suppose you wanted to 
> highlight a particular region of your data with a specific facecolor or 
> edgecolor -- you can apply the features you want to individual patches using 
> approach (2).  Or if you wanted to highlight a specific bin with thicker 
> lines.
> 
> 
> 
> This is a common theme in matplotlib -- you can use keywords to apply the 
> same features to every part of a plot or you can iterate over the drawn 
> objects and customize them individually.  This is a large part of what makes 
> matplotlib nice to me -- it has a "simple" mode as well as a predictable API 
> for customizing a plot in almost any way you could possibly want.
> 
> 
> 
> HTH,
> Jason
> 
> 
> -- 
> 
> Jason M. Swails
> BioMaPS,
> Rutgers University
> Postdoctoral Researcher

That's great Jason thanks for the detailed response, I went with the easier 
option 1!

I am also trying to put hatches on my histograms like so:

plt.hist(dataset,bins=10,hatch=['*'])

When it comes to plt.show() I get the following error message:
File 
"/usr/local/sci/lib/python2.7/site-packages/matplotlib-1.3.1-py2.7-linux-x86_64.egg/matplotlib/backends/backend_gtk.py",
 line 435, in expose_event
    self._render_figure(self._pixmap, w, h)
  File 
"/usr/local/sci/lib/python2.7/site-packages/matplotlib-1.3.1-py2.7-linux-x86_64.egg/matplotlib/backends/backend_gtkagg.py",
 line 84, in _render_figure
    FigureCanvasAgg.draw(self)
  File 
"/usr/local/sci/lib/python2.7/site-packages/matplotlib-1.3.1-py2.7-linux-x86_64.egg/matplotlib/backends/backend_agg.py",
 line 451, in draw
    self.figure.draw(self.renderer)
  File 
"/usr/local/sci/lib/python2.7/site-packages/matplotlib-1.3.1-py2.7-linux-x86_64.egg/matplotlib/artist.py",
 line 55, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File 
"/usr/local/sci/lib/python2.7/site-packages/matplotlib-1.3.1-py2.7-linux-x86_64.egg/matplotlib/figure.py",
 line 1034, in draw
    func(*args)
  File 
"/usr/local/sci/lib/python2.7/site-packages/matplotlib-1.3.1-py2.7-linux-x86_64.egg/matplotlib/artist.py",
 line 55, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File 
"/usr/local/sci/lib/python2.7/site-packages/matplotlib-1.3.1-py2.7-linux-x86_64.egg/matplotlib/axes.py",
 line 2086, in draw
    a.draw(renderer)
  File 
"/usr/local/sci/lib/python2.7/site-packages/matplotlib-1.3.1-py2.7-linux-x86_64.egg/matplotlib/artist.py",
 line 55, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File 
"/usr/local/sci/lib/python2.7/site-packages/matplotlib-1.3.1-py2.7-linux-x86_64.egg/matplotlib/patches.py",
 line 429, in draw
    renderer.draw_path(gc, tpath, affine, rgbFace)
  File 
"/usr/local/sci/lib/python2.7/site-packages/matplotlib-1.3.1-py2.7-linux-x86_64.egg/matplotlib/backends/backend_agg.py",
 line 145, in draw_path
    self._renderer.draw_path(gc, path, transform, rgbFace)
  File 
"/usr/local/sci/lib/python2.7/site-packages/matplotlib-1.3.1-py2.7-linux-x86_64.egg/matplotlib/backend_bases.py",
 line 1010, in get_hatch_path
    return Path.hatch(self._hatch, density)
  File 
"/usr/local/sci/lib/python2.7/site-packages/matplotlib-1.3.1-py2.7-linux-x86_64.egg/matplotlib/path.py",
 line 888, in hatch
    hatch_path = cls._hatch_dict.get((hatchpattern, density))
TypeError: unhashable type: 'list'
Traceback (most recent call last):
  File 
"/usr/local/sci/lib/python2.7/site-packages/matplotlib-1.3.1-py2.7-linux-x86_64.egg/matplotlib/backends/backend_gtk.py",
 line 435, in expose_event
    self._render_figure(self._pixmap, w, h)
  File 
"/usr/local/sci/lib/python2.7/site-packages/matplotlib-1.3.1-py2.7-linux-x86_64.egg/matplotlib/backends/backend_gtkagg.py",
 line 84, in _render_figure
    FigureCanvasAgg.draw(self)
  File 
"/usr/local/sci/lib/python2.7/site-packages/matplotlib-1.3.1-py2.7-linux-x86_64.egg/matplotlib/backends/backend_agg.py",
 line 451, in draw
    self.figure.draw(self.renderer)
  File 
"/usr/local/sci/lib/python2.7/site-packages/matplotlib-1.3.1-py2.7-linux-x86_64.egg/matplotlib/artist.py",
 line 55, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File 
"/usr/local/sci/lib/python2.7/site-packages/matplotlib-1.3.1-py2.7-linux-x86_64.egg/matplotlib/figure.py",
 line 1034, in draw
    func(*args)
  File 
"/usr/local/sci/lib/python2.7/site-packages/matplotlib-1.3.1-py2.7-linux-x86_64.egg/matplotlib/artist.py",
 line 55, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File 
"/usr/local/sci/lib/python2.7/site-packages/matplotlib-1.3.1-py2.7-linux-x86_64.egg/matplotlib/axes.py",
 line 2086, in draw
    a.draw(renderer)
  File 
"/usr/local/sci/lib/python2.7/site-packages/matplotlib-1.3.1-py2.7-linux-x86_64.egg/matplotlib/artist.py",
 line 55, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File 
"/usr/local/sci/lib/python2.7/site-packages/matplotlib-1.3.1-py2.7-linux-x86_64.egg/matplotlib/patches.py",
 line 429, in draw
    renderer.draw_path(gc, tpath, affine, rgbFace)
  File 
"/usr/local/sci/lib/python2.7/site-packages/matplotlib-1.3.1-py2.7-linux-x86_64.egg/matplotlib/backends/backend_agg.py",
 line 145, in draw_path
    self._renderer.draw_path(gc, path, transform, rgbFace)
  File 
"/usr/local/sci/lib/python2.7/site-packages/matplotlib-1.3.1-py2.7-linux-x86_64.egg/matplotlib/backend_bases.py",
 line 1010, in get_hatch_path
    return Path.hatch(self._hatch, density)
  File 
"/usr/local/sci/lib/python2.7/site-packages/matplotlib-1.3.1-py2.7-linux-x86_64.egg/matplotlib/path.py",
 line 888, in hatch
    hatch_path = cls._hatch_dict.get((hatchpattern, density))
TypeError: unhashable type: 'list'

Do you have any idea why this is happening?

Cheers,

Jamie
-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to