Benjamin Root <ben.root-grryuj3d...@public.gmane.org> writes:
> On Thu, Oct 28, 2010 at 3:31 PM, Nikolaus Rath 
> <nikolaus-bth8mxji...@public.gmane.org> wrote:
>
>> Hello,
>>
>> I'm having a weird problem with a contour plot. Consider the following
>> plots:
>>
>> import cPickle as pickle
>> import matplotlib.pyplot as plt
>> (Theta, Phi, Bnormal) = pickle.load(open('trouble.pickle', 'rb'))
>> plt.figure(0)
>> for i in [0, 300]:
>>    plt.plot(Theta, Bnormal[:, i], label='Bnormal at Phi=%.3g' % Phi[i])
>>
>> plt.ylabel('Theta')
>> plt.legend()
>> plt.savefig('figure0.png')
>> plt.figure(1)
>> plt.contourf(Phi, Theta, Bnormal)
>> plt.xlabel('Phi')
>> plt.ylabel('Theta')
>> plt.colorbar()
>> plt.savefig('figure1.png')
>>
>> The 'trouble.pickle' file is available on
>> http://www.rath.org/trouble.pickle. At Phi=0 the contour plot agrees
>> with the crossection (both show an n=7 oscillation), but at Phi=1.68 the
>> contour plot shows a uniform value while the crossection shows a phase
>> shifted version of oscillation at Phi=0.
>>
>> It seems to me that this is a blatant contradiction.
>>
>>
>> I have also uploaded the two figures at http://www.rath.org/figure1.png
>> and http://www.rath.org/figure0.png.
>>
>>
>> Am I missing something, or is this a bug?
>>
>> $ python --version
>> Python 2.6.5
>> $ python -c 'import matplotlib; print matplotlib.__version__'
>> 1.0.0
>>
>>
>> Thanks,
>>
>>   -Nikolaus
>>
>>
> Nikolaus,
>
> What might be happening is that the Theta variable isn't monotonic.  It
> first goes from zero to pi, then from -pi to 0.  This also explains the odd
> lines that appear in the line plots at the top and bottom.  Try reforming
> your arrays so that the domain is monotonic (note that you will have to
> adjust the Phi and the Bnormal arrays as well because they were arranged
> assuming a certain domain from Theta.

Indeed, this was the problem. Thank you very much!


However, it seems to me that this is quite a serious bug. The contour
documentation on
http://matplotlib.sourceforge.net/api/axes_api.html#matplotlib.axes.Axes.contour
does not mention this requirement, and obviously the contour method
itself does not even bother to check if its arguments are monotonically
increasing. Instead, it just *silently* produces garbage that in some
cases even looks like plausible data(!).

Am I missing something here? Otherwise I'll report this on the bug
tracker. I think this should be documented and contour() should check
its input and raise a ValueError if it's not monotonic.



Best,

   -Nikolaus

-- 
 »Time flies like an arrow, fruit flies like a Banana.«

  PGP fingerprint: 5B93 61F8 4EA2 E279 ABF6  02CF A9AD B7F8 AE4E 425C

------------------------------------------------------------------------------
Nokia and AT&T present the 2010 Calling All Innovators-North America contest
Create new apps & games for the Nokia N8 for consumers in  U.S. and Canada
$10 million total in prizes - $4M cash, 500 devices, nearly $6M in marketing
Develop with Nokia Qt SDK, Web Runtime, or Java and Publish to Ovi Store 
http://p.sf.net/sfu/nokia-dev2dev
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to