> From: Nikolaus Rath [mailto:nikol...@rath.org] 
> Sent: Tuesday, November 02, 2010 21:38
> 
> In [16]: matplotlib.__version__
> Out[16]: '1.0.0'
> 
> I attached the result of fig.savefig(). Let's see if it makes 
> it through
> the list.

The bug in question was fixed at revision 8652, after 1.0.0 was released.  The
distinction between the x and y axes in your case is because the y axis is
inverted.

You can work around the bug by avoiding the Axes.set_xticks() and set_yticks()
methods and instead setting the tick locator and formatter [1] for each axis.
(That's what set_xticks and set_yticks do, in addition to other conveniences
wherein the bug lies.)  This would look something like:

    import matplotlib.ticker as mticker
    
    # (Plot here.)

    tick_locs = 2 * np.arange(len(modes)) + 0.5
    tick_labels = ['%d/%d' % (x[1], x[0]) for x in modes]
    for axis in (ax.xaxis, ax.yaxis):
        axis.set_major_locator(mticker.FixedLocator(tick_locs))
        axis.set_major_formatter(mticker.FixedFormatter(tick_labels))

Separately, because you're ticking on the element boundaries instead of
centers, you might consider passing a custom extent to matshow, as in

    N = 5
    res = np.diag(np.arange(2 * N))
    modes = [ (x+1, 0) for x in range(N) ]
    cs = ax.matshow(res, extent=[-0.5, N - 0.5, N - 0.5, -0.5])

Then you can simply tick on the integers, using

    tick_locs = np.arange(N)

I hope that helps.

[1] http://matplotlib.sourceforge.net/api/ticker_api.html


------------------------------------------------------------------------------
The Next 800 Companies to Lead America's Growth: New Video Whitepaper
David G. Thomson, author of the best-selling book "Blueprint to a 
Billion" shares his insights and actions to help propel your 
business during the next growth cycle. Listen Now!
http://p.sf.net/sfu/SAP-dev2dev
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to