On Mon, Jun 25, 2012 at 10:03 AM, julien tayon <julien@tayon.net> wrote:

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

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