Nils,

Here is a version that runs through.  It produces two different versions of 
your graph: one with the colors corresponding to the index of the arrays, the 
other with the colors corresponding to the value of the histogram.  I hope this 
helps.

-Sterling

{{{
import re
import os
import sys
import gzip
import numpy as np
import matplotlib.pyplot as plt
import glob
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.colors as colors
import matplotlib.cm as cmx

efratio = np.loadtxt('efratio-10.dat.gz')
hist,bin_edges = np.histogram(efratio,bins=100,range=(0.,1.),density=False)
width = 0.7*(bin_edges[1]-bin_edges[0])
center = (bin_edges[:-1]+bin_edges[1:])/2

coolwarm = cm =  plt.get_cmap('coolwarm')
values = range(100)
for normed in [values,hist]:
    cNorm  = colors.Normalize(vmin=0, vmax=max(normed))
    scalarMap = cmx.ScalarMappable(norm=cNorm, cmap=coolwarm)
    colours = []
    for value in normed:
        colorVal = scalarMap.to_rgba(value)
        colours.append(colorVal)

    fig = plt.figure()
    ax  = fig.add_subplot(111,projection='3d')
    heatmap = ax.bar(center, hist, zs=1, zdir='y', align = 'center', width = 
width,color=colours,linewidth=0)
    scalarMap.set_array(normed)
    plt.colorbar(scalarMap,ax=ax)
    plt.show()
}}}
On Oct 14, 2013, at 6:12AM, Nils Wagner wrote:

> Here is a self contained version.
> 
> Nils
> 
> 
> 
> 
> On Fri, Oct 11, 2013 at 4:33 PM, Sterling Smith <smit...@fusion.gat.com> 
> wrote:
> Nils,
> 
> I tried to run your example, but there are some variables which are 
> undefined.  Can you post a self contained revision of your example?
> 
> -Sterling
> 
> On Oct 11, 2013, at 1:34AM, Nils Wagner wrote:
> 
> > plt.colorbar(scalarMap,ax=ax) results in
> >
> > cm.py", line 309, in autoscale_None
> >     raise TypeError('You must first set_array for mappable')
> > TypeError: You must first set_array for mappable
> >
> > Nils
> >
> >
> >
> > On Fri, Oct 11, 2013 at 9:51 AM, Eric Firing <efir...@hawaii.edu> wrote:
> > On 2013/10/10 8:52 PM, Nils Wagner wrote:
> > > Hi all,
> > >
> > > I tried to add a colorbar to a bar plot
> > >
> > > coolwarm = cm =  plt.get_cmap('coolwarm')
> > > values = range(100)
> > > cNorm  = colors.Normalize(vmin=0, vmax=values[-1])
> > > scalarMap = cmx.ScalarMappable(norm=cNorm, cmap=coolwarm)
> > > colours = []
> > > for value in values:
> > >      colorVal = scalarMap.to_rgba(value)
> > >      colours.append(colorVal)
> > >
> > > fig = plt.figure()
> > > ax  = fig.add_subplot(111,projection='3d')
> > > hist,bin_edges = 
> > > np.histogram(efratio,bins=100,range=(0.,1.),density=False)
> > > width = 0.7*(bin_edges[1]-bin_edges[0])
> > > center = (bin_edges[:-1]+bin_edges[1:])/2
> > > heatmap = ax.bar(center, hist, zs=z, zdir='y', align = 'center', width =
> > > width,color=colours)
> > > plt.colorbar(heatmap)
> > >
> > >
> > >
> > >
> > >
> > >      mappable.autoscale_None() # Ensure mappable.norm.vmin, vmax
> > > AttributeError: 'BarContainer' object has no attribute 'autoscale_None'
> >
> > This is because it is not an instance of ScalarMappable, which is what
> > colorbar() requires as its argument.
> > >
> > > How can I fix the problem ?
> >
> > Use scalarMap as the argument instead of heatmap.  I think you will need
> > to provide either the cax or the ax kwarg in addition.
> >
> > examples/api/colorbar_only.py might also be helpful.
> >
> > Eric
> > >
> > > Nils
> > >
> > >
> > >
> > > ------------------------------------------------------------------------------
> > > October Webinars: Code for Performance
> > > Free Intel webinars can help you accelerate application performance.
> > > Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most 
> > > from
> > > the latest Intel processors and coprocessors. See abstracts and register >
> > > http://pubads.g.doubleclick.net/gampad/clk?id=60134071&iu=/4140/ostg.clktrk
> > >
> > >
> > >
> > > _______________________________________________
> > > Matplotlib-users mailing list
> > > Matplotlib-users@lists.sourceforge.net
> > > https://lists.sourceforge.net/lists/listinfo/matplotlib-users
> > >
> >
> >
> > ------------------------------------------------------------------------------
> > October Webinars: Code for Performance
> > Free Intel webinars can help you accelerate application performance.
> > Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most 
> > from
> > the latest Intel processors and coprocessors. See abstracts and register >
> > http://pubads.g.doubleclick.net/gampad/clk?id=60134071&iu=/4140/ostg.clktrk
> > _______________________________________________
> > Matplotlib-users mailing list
> > Matplotlib-users@lists.sourceforge.net
> > https://lists.sourceforge.net/lists/listinfo/matplotlib-users
> >
> > ------------------------------------------------------------------------------
> > October Webinars: Code for Performance
> > Free Intel webinars can help you accelerate application performance.
> > Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most 
> > from
> > the latest Intel processors and coprocessors. See abstracts and register >
> > http://pubads.g.doubleclick.net/gampad/clk?id=60134071&iu=/4140/ostg.clktrk_______________________________________________
> > Matplotlib-users mailing list
> > Matplotlib-users@lists.sourceforge.net
> > https://lists.sourceforge.net/lists/listinfo/matplotlib-users
> 
> 
> <efratio-9.dat.gz><test.py>


------------------------------------------------------------------------------
October Webinars: Code for Performance
Free Intel webinars can help you accelerate application performance.
Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from 
the latest Intel processors and coprocessors. See abstracts and register >
http://pubads.g.doubleclick.net/gampad/clk?id=60135031&iu=/4140/ostg.clktrk
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to