contour plots with logarithmic axes

Is there any way to simply make a contour plot with logarithmic axes
using matplotlib? I found a workaround by plotting log10(x), log10(y),
but it'd be nicer if it was more direct.

As someone new to matplotlib (experienced in IDL) I'm finding much to
like, but some things are more difficult for no clear reason. It would
seem to me that whether the axes are logarithmic or not would be a nice
thing to have as an attribute of the plot object. I'm not familiar yet
with the matplotlib internals to know how difficult that would be to
implement, but it sure would be convenient.

Jon Slavin

Contour will work as expected if the axes is in log scale. See below.

z = np.arange(100).reshape((10,10))
x = np.logspace(0, 4, 10)
y = np.logspace(0, 4, 10)

ax1 = subplot(121)
ax1.contour(np.log10(x), np.log10(y), z)

ax2 = subplot(122)
ax2.set_xscale("log")
ax2.set_yscale("log")
ax2.contour(x, y, z)

Regards,

-JJ

p.s. good to see another astronomer begin to use matplotlib.

···

On Mon, Jan 11, 2010 at 3:33 PM, Jonathan Slavin <jslavin@...1081...> wrote:

Is there any way to simply make a contour plot with logarithmic axes
using matplotlib? I found a workaround by plotting log10(x), log10(y),
but it'd be nicer if it was more direct.

As someone new to matplotlib (experienced in IDL) I'm finding much to
like, but some things are more difficult for no clear reason. It would
seem to me that whether the axes are logarithmic or not would be a nice
thing to have as an attribute of the plot object. I'm not familiar yet
with the matplotlib internals to know how difficult that would be to
implement, but it sure would be convenient.

Jon Slavin

------------------------------------------------------------------------------
This SF.Net email is sponsored by the Verizon Developer Community
Take advantage of Verizon's best-in-class app development support
A streamlined, 14 day to market process makes app distribution fast and easy
Join now and get one step closer to millions of Verizon customers
http://p.sf.net/sfu/verizon-dev2dev
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Jae-Joon Lee wrote:

Contour will work as expected if the axes is in log scale. See below.

z = np.arange(100).reshape((10,10))
x = np.logspace(0, 4, 10)
y = np.logspace(0, 4, 10)

ax1 = subplot(121)
ax1.contour(np.log10(x), np.log10(y), z)

ax2 = subplot(122)
ax2.set_xscale("log")
ax2.set_yscale("log")
ax2.contour(x, y, z)

JJ,

Actually, I think your example illustrates that there is a problem with the second approach--the first subplot generates straight lines, the second does not. The contour calculation itself really needs to be done in coordinates that are linear as displayed, because the contour locations are determined by linear interpolation.

Adding support for log scales to make contour work right in your second example would be easy; making it work with more general transforms, and making it work when the transform changes after the call to contour, would be harder.

I will have to look into this.

Eric

···

Regards,

-JJ

p.s. good to see another astronomer begin to use matplotlib.

On Mon, Jan 11, 2010 at 3:33 PM, Jonathan Slavin > <jslavin@...1081...> wrote:

Is there any way to simply make a contour plot with logarithmic axes
using matplotlib? I found a workaround by plotting log10(x), log10(y),
but it'd be nicer if it was more direct.

As someone new to matplotlib (experienced in IDL) I'm finding much to
like, but some things are more difficult for no clear reason. It would
seem to me that whether the axes are logarithmic or not would be a nice
thing to have as an attribute of the plot object. I'm not familiar yet
with the matplotlib internals to know how difficult that would be to
implement, but it sure would be convenient.

Jon Slavin

------------------------------------------------------------------------------
This SF.Net email is sponsored by the Verizon Developer Community
Take advantage of Verizon's best-in-class app development support
A streamlined, 14 day to market process makes app distribution fast and easy
Join now and get one step closer to millions of Verizon customers
http://p.sf.net/sfu/verizon-dev2dev
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

------------------------------------------------------------------------------
This SF.Net email is sponsored by the Verizon Developer Community
Take advantage of Verizon's best-in-class app development support
A streamlined, 14 day to market process makes app distribution fast and easy
Join now and get one step closer to millions of Verizon customers
http://p.sf.net/sfu/verizon-dev2dev _______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users