From: John H. <jdh...@ac...> - 2003-11-12 04:51:12
|
>>>>> "Charles" == Charles <ct...@cs...> writes: Charles> Hi John, I added one line that shows the problem. If you Charles> do a set_xticks() first, then the usual ([]) doesn't Charles> blank them. Here's code that should suppress the xticks Charles> for all but the bottom-most graphs in each column. It Charles> works if you comment out the set_xticks line (HERE HERE Charles> HERE). Hi Charles, As an aside, you'll be interested in these super secret undocumented methods of the Subplot class, which I implemented so I wouldn't have to do the if i % COLS == 1 tricks that I came to know and love in matlab. I too find myself making lots-o-subplots and blanking out the labels Subplot methods: def is_first_col(self): def is_first_row(self): def is_last_row(self): def is_last_col(self): which enables you to write your loop for i in range(1,NUMPLOTS+1): ax = subplot (ROWS, COLS, i) ax.set_xticks((0,1,2)) title('Simple ' + str(i)) if ax.is_first_col(): ax.set_ylabel('voltage (mV)') else: ax.set_yticklabels ([]) if ax.is_last_row(): ax.set_xlabel('time (s)') else: ax.set_xticklabels ([]) Now onto your problem. Thanks for the example script. I am not sure which version of matplotlib you are working with, but it appears there is a clear bug in Axis.set_ticklabels in the part which reads for s, label in zip(self._ticklabelStrings, self._ticklabels): label.set_text(s) label.update_properties(override) when len(self._ticklabelStrings) is less than len(self._ticklabels), the label text doesn't get updated. Duh! Something like this should work better. At least with matplotlib-0.32a it handles your example def set_ticklabels(self, ticklabels, *args, **kwargs): """ Set the text values of the tick labels. ticklabels is a sequence of strings. Return a list of AxisText instances """ ticklabels = ['%s'%l for l in ticklabels] self._ticklabelStrings = ticklabels override = {} override = backends._process_text_args(override, *args, **kwargs) Nnew = len(self._ticklabelStrings) existingLabels = self.get_ticklabels() for i, label in enumerate(existingLabels): if i<Nnew: label.set_text(self._ticklabelStrings[i]) else: label.set_text('') label.update_properties(override) return existingLabels Charles> Is this comment better for -users or -devel? Or bug Charles> tracking? I think users, since my answer includes a *possible* fix which others may find useful. Let me know how this works for you; I'll take a closer look on Thurs when I have some breathing room again. JDH |