|
From: Victor H. <vic...@ya...> - 2011-06-14 08:55:56
|
Ben, Awesome - thanks for the sample code. I had to make a slight change - multiplying 'y' by a float doesn't work: TypeError: can't multiply sequence by non-int of type 'float' I just did a cast to int, and it worked - not sure if this is a bad practice in Python though?: cs = (['y'] * int(round(0.25 * len(xs)))) + (['g'] * int(round(0.5 * > len(xs)))) + (['y'] * int(round(0.25 * len(xs)))) Anyhow, it's a pity I can't use your code with Matplotlib's hist() - as that definitely made producing histograms bins much easier. It's strange that colour-coding bars isn't a feature of hist(). I guess I'll have to look at doing all the hist setup/calculations by hand. Ah well. Thanks, Victor On Wed, Feb 23, 2011 at 03:12, Benjamin Root <ben...@ou...> wrote: > > > On Tue, Feb 15, 2011 at 11:07 PM, Victor Hooi <vic...@ya...>wrote: > >> heya, >> >> Is there an easy way to colour-code a Matplotlib histogram with a single >> set of data? >> >> So for example, you'd have a bell-shaped histogram, and the middle 50% >> might be green, the regions 20% to the left and right of that might be >> yellow, and the 5% either side beyond that could be red. >> >> I couldn't seem to find anything in the Matplotlib options for this - any >> suggestions? >> >> Cheers, >> Victor >> >> > Sure, check out the following: > > import matplotlib.pyplot as plt > import numpy as np > > xs = np.arange(20) > ys = np.random.rand(20) > cs = (['y'] * round(0.25 * len(xs))) + (['g'] * round(0.5 * len(xs))) + > (['y'] * round(0.25 * len(xs))) > > plt.bar(xs, ys, color=cs) > plt.show() > > > Admittedly, this isn't using matplotlib's hist() function because it only > allows for one color per dataset. However, you can use numpy's histogram > function to get the bins and counts yourself, and then use bar() to make the > bars. bar() will allow you to color the bars individually. > > I hope this helps! > Ben Root > > |