From: <dav...@fr...> - 2005-08-30 22:43:44
|
david> I have different lines (at least two) that I would like to david> update and also hide/show and I expected that autoscaling david> will take all these aspects (updated data, hiden data) to david> scale the graph to all visible data. david> Furthermore I use the sharey stuff that complicated a bit the= story Thank you very much John. It works ! Here is the final version of the algorithm: line_list is the list of line >ignore =3D True >for line in (line_list): > if not line.get_visible(): continue > self.ax.dataLim.update_numerix( line.get_xdata(), > line.get_ydata(), > ignore ) > ignore =3D False >self.ax.autoscale_view() Note: we cannot use update_datalim_numerix() because "ignore" is not an a= rgument but using dataLim.update_numerix is ok. This version allows to avoid problem if the fist line is not visible (compared to your original version) Same function applied to the second axes which share the y axis and everything is perfect :-) What about adding this function to the axes class using the line list ava= ilable? Should give something like: def autoscale_visible_lines(self): ignore =3D True for line in (self.lines): if not line.get_visible(): continue self.dataLim.update_numerix( line.get_xdata(), line.get_ydata(), ignore ) ignore =3D False self.autoscale_view() Thanks for your help and your amazing matplotlib ! Best regards, David Selon John Hunter <jdh...@ac...>: > If you have a list of lines that you want to pass to the autoscaler, > and have it operate on that list only (ignoring previous settings) do > the following > > First update your line data and then create a list of lines that you > want to autoscale for. The ignore setting will be True for the first > line in the list which will cause it to ignore it's history. Thus the > datalim will be updated to bound only the lines in the list "lines" > > for i,line in enumerate(lines): > ignore =3D i=3D=3D0 > if not line.get_visible(): continue > x =3D asarray(line.get_xdata()) > y =3D asarray(line.get_ydata()) > ax.update_datalim_numerix(x, y, ignore) > ax.autoscale_view() > > You should be able to do this separately for each of your two axes > (even if they are sharing the x axes, their y axes is independent). > > If you are still having trouble after trying this, please post a > complete example. > > JDH > |