Hi Eric,

>> import matplotlib.pyplot as plt
>> fig, axes = plt.subplots(nrows=2,sharex=True)
>> axes[0].set_aspect(1.)
>> axes[0].plot(np.arange(10),np.arange(10))
>> axes[0].set_ylim([0,24])
>> axes[0].set_xlim([0,12])
>> axes[1].plot(np.arange(10),np.arange(10)*2.)
>> plt.show()
>> 
>> does not work as I'd expect.  axes[0]'s ylim gets changed so that the line 
>> is no longer viewable (= 10-14).  In my opinion, the two calls should work 
>> the same, except in the second case, axes[1]'s xlim should be 0-12.
>> 
> 
> If you leave out the set_ylim call, it works.  Given that you have specified 
> set_ylim[0, 24], how is mpl supposed to know what ylim range you really want, 
> when the axis constraint means it can only plot a small part of the specified 
> range?  

It doesn't for me:

import matplotlib.pyplot as plt
fig, axes = plt.subplots(nrows=2,sharex=True)
axes[0].set_aspect(1.)
axes[0].plot(np.arange(10),np.arange(10))
axes[1].plot(np.arange(10),np.arange(10)*2.)
plt.show()

still curtails the y limit in axes[0], in my case from ~2.9 to ~6.1 (see 
attached).

> Basically, you have set up conflicting constraints, and mpl failed to resolve 
> the conflict the way you think it should have.  Maybe that could be improved, 
> but I warn you, it's a tricky business.  Squeeze in one place and things pop 
> out somewhere else.

I'm not clear what the conflicting constraints are.  There seems to be an 
unspoken one that sharex=True means the physical size of the axes must be the 
same. That constraint doesn't exist if sharex=False, and set_aspect() works as 
expected.  I'm questioning the unspoken constraint, and questioning why 
set_aspect() (or looking at the code apply_aspect()) needs to know about shared 
axes at all.  No doubt there is a use case I'm missing...

I *can* see the issue if we think setting aspect ratios should *not* change the 
size of the axes, because changing the aspect ratio changes the data limits and 
then you have a problem checking all the shared axes to see which one has the 
largest data limits.  Its particularly problematic because I think that 
apply_aspect() is only called at draw()-time.  That seems a hard problem, but 
I'm not sure what the use case is for it, so I have trouble wrapping my head 
around it. 

Thanks,   Jody


--
Jody Klymak    
http://web.uvic.ca/~jklymak/





------------------------------------------------------------------------------
BPM Camp - Free Virtual Workshop May 6th at 10am PDT/1PM EDT
Develop your own process in accordance with the BPMN 2 standard
Learn Process modeling best practices with Bonita BPM through live exercises
http://www.bonitasoft.com/be-part-of-it/events/bpm-camp-virtual- event?utm_
source=Sourceforge_BPM_Camp_5_6_15&utm_medium=email&utm_campaign=VA_SF
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to