|
From: Sterling S. <sm...@fu...> - 2012-09-13 22:33:47
|
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
> Mat...@li...
> https://lists.sourceforge.net/lists/listinfo/matplotlib-users
|