On Mon, Jun 25, 2012 at 10:03 AM, julien tayon <julien@tayon.net> 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/python-matplotlib-contour-plot-logarithmic-color-scale)


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 "work-around" 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