Daniel,

I found that I came across this often, so I created three functions (one for 
sharing x, one for y, and one for both).  In looking over them right now, there 
may be some inconsistencies between their style, but the idea is there. I am 
pasting them below in case they are useful to someone else.  The original ideas 
came from figure.autofmt_xdate.

-Sterling

def autofmt_sharexy(fig=None):
 if fig==None:
  fig = gcf()
 for a in fig.axes:
  if a.is_first_col():
   if not a.is_first_row():
    a.get_yticklabels()[-1].set_visible(False)
  else:
   for yl in a.get_yticklabels():
    yl.set_visible(False)
   a.set_ylabel('')
  if not a.is_last_row():
   for xl in a.get_xticklabels():
    xl.set_visible(False)
   a.set_xlabel('')
  else:
   if not a.is_last_col():
    a.get_xticklabels()[-1].set_visible(False)
 subplots_adjust(hspace=0,wspace=0)

def autofmt_sharey(trim_xlabel=True,fig=None):
 if fig==None:
  fig = gcf()
 from matplotlib.ticker import MaxNLocator
 for a in fig.axes:
  if a.is_first_col():
   if not a.is_first_row():
    a.get_yticklabels()[-1].set_visible(False)
  else:
   for yl in a.get_yticklabels():
    yl.set_visible(False)
   a.set_ylabel('')
   if trim_xlabel:
    a.get_xticklabels()[0].set_visible(False)
  if not trim_xlabel:
   a.xaxis.set_major_locator(MaxNLocator(6))
   xtl = a.get_xticklabels()
   setp(xtl[0::2],visible=False)
 subplots_adjust(wspace=0)


def autofmt_sharex(fig=None):
   if fig==None:
    fig = gcf()
   nax=len(fig.get_axes())
   if nax==0: return
   try:
      nr=fig.axes[0].numRows
      nc=fig.axes[0].numCols
   except:
      print 'Unable to determine numRows,numCols'
      return
   def is_last_row(n):
      if n>nax-nc-1:
         return True
      else:
         return False
   for i,ax in enumerate(fig.axes):
      if not is_last_row(i):
         for xt in ax.get_xticklabels(): xt.set_visible(False)
         ax.set_xlabel('')

-Sterling

On Sep 13, 2012, at 1:23PM, Daniel Welling wrote:

> Greetings, all.
> 
> I have an issue: I have several axes stacked in a column with a common time 
> vector on each x-axis.  Each plot is a contour, so overplotting is not an 
> option.  In a perfect world, I want the following:
> 1) The subplots are tightly spaced such that with ax.grid() activated, the 
> grid lines appear continuous.  This makes comparing simultaneous 
> characteristics between subplots very easy.
> 2) The subplots are linked via the "sharex" keyword so I can move them all in 
> unison.
> 3) Only the bottommost subplot has x tick labels; on other plots, the long 
> time-formatted labels stick out of the left and right of the plots.
> 
> Items 2 and 3 are contradictory: if I turn off tick labels (e.g. 
> ax.set_xticklabels('')) on one axes, the others turn off as well, including 
> the bottom axes.  That is bad.
> Does anyone know of a good workaround for this?
> 
> Thanks for your help.
> 
> -dw
> ------------------------------------------------------------------------------
> Live Security Virtual Conference
> Exclusive live event will cover all the ways today's security and 
> threat landscape has changed and how IT managers can respond. Discussions 
> will include endpoint security, mobile security and the latest in malware 
> threats. 
> http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/_______________________________________________
> Matplotlib-users mailing list
> Matplotlib-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/matplotlib-users


------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to