From: Robin <ro...@gm...> - 2008-05-21 12:40:26
|
Hi, I have the following code to produce a greyscale stack bar graph for an arbitrary numbers of input vectors with an arbitrary number of elements. This is what I have so far. It works fine - the only problem is I have n times too many legend entries where n is the number of input vectors. I just want to label the color for the first element of each vector once, but I'm a bit stuck on how to do this. Any help appreciated. def plot_stacked(*vals): numstacks = len(vals) vallength = set([len(val) for val in vals]) if len(vallength) > 1: raise ValueError,'All input values should have the same length' vallength = vallength.pop() ind = 0.25 + arange(numstacks) width = 0.5 bottom = zeros(numstacks) print arange(vallength) colorvals = arange(vallength) * (1.0/(vallength-1)) print colorvals orderlabels = ['First Order','Second Order','Third Order','Fourth Order'] labels = orderlabels[:vallength-1] + ['Higher Order'] for i in range(vallength): ivals = [val[i] for val in vals] bar(ind, ivals, width, bottom=bottom, color=str(colorvals[i]),label=labels[i]) bottom += ivals xlim(0,numstacks+1) legend() Thanks Robin |