On 2015/04/08 11:15 AM, Jody Klymak wrote: > 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).
Jody, you told it you want x to go from 0 to 12, and have an aspect ratio of 1. It is doing exactly that. Are you expecting it to override your xlim specification? > >> 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... Yes, sharex=True means the x-axis is identical. It's shared. That's just what it means, and what it has always meant. That's what it is for--to lock together the x axes of two or more Axes. > > 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. The use case for what--calling apply_aspect at draw time? That's the only time it knows everything it needs to know in the general case, when there might be pan/zoom/reshape events. Eric > > 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 > ------------------------------------------------------------------------------ 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