From: Benjamin Root <ben.root@ou...>  20120626 19:19:50

On Mon, Jun 25, 2012 at 10:03 AM, julien tayon <julien@...> wrote: > Hello, > > I made a crude sonogram https://gist.github.com/2983547 with the note > names instead of the frequency. But, It really angers me not to be > able to have a log scale for the frequency. > > Does any well known workaround exists? > Is there an easy way to grosso modo do : > x = time, y = frequency, z=amplitude of spectre with something like a > specter of one croche at time = t according to the bpm and make an y > scale logarithmic, then project the amplitude (z) with a colormap on > x,y plane according to the amplitude, and and have 3D representation? > > Basically, I guess it boils down to know if combining those 2 is > possible : > http://matplotlib.sourceforge.net/examples/mplot3d/contourf3d_demo2.html > + log scale for y. I guess I could improve the result by using > logscale on Z and colormap > ( > http://stackoverflow.com/questions/5748076/pythonmatplotlibcontourplotlogarithmiccolorscale > ) > > > Since it is only for fun, and I don't want to invest myself too much > my question is really did I missed something while googling for an > easy solution and if so, what are the good keywords? > > Cheers >  > Julien > > Julien, I am not entirely sure if I understood your question right, but I think I can answer part of it. With respect to using a log scale for 3d axes, it *should* work, but unfortunately, I have never been able to get it to work properly. It is an outstanding bug for mplot3d. The "workaround" is to do the log transformation yourself for the input x/y/z data. However, there is no reason why you can't use a LogNorm for your colormap. Just so you understand, color scales in matplotlib are done in two parts. We have the "Norm" objects which takes data and produce values between 0 and 1 (and handles bad, over, and under values accordingly). And we have "colormap" objects that take values from 0 to 1 and produce an RGB(A) array. By default, most functions in matplotlib will use the min/max of the input data to automatically create a linear Norm object, and will use the "prism" colormap. However, you can create a LogNorm object and pass it in as the 'norm' kwarg in most plotting functions. I hope this helps! Ben Root 