Adding a subplot that doesn't share an x axis when others do

matplotlib, python, subplot

Solution

It's easiest to use `fig.add_subplot` directly in this case.

As a quick example:

import matplotlib.pyplot as plt

fig = plt.figure(figsize=(6, 8))

# Axes that share the x-axis
ax = fig.add_subplot(4, 1, 1)
axes = [ax] + [fig.add_subplot(4, 1, i, sharex=ax) for i in range(2, 4)]

# The bottom independent axes
axes.append(fig.add_subplot(4, 1, 4))

# Let's hide the tick labels for all but the last shared-x axes
for ax in axes[:2]:
    plt.setp(ax.get_xticklabels(), visible=False)

# And plot on  the first subplot just to demonstrate that the axes are shared
axes[0].plot(range(21), color='lightblue', lw=3)

plt.show()

Problem

I'm trying to add a subplot onto the bottom of a figure of subplots. The issue I've got is that all of the first set of subplots want to share their x axis, but not the bottom one. `channels` are the subplots that want to share the x axis. So how can I add a subplot that does not share the x axis? This is my code: ``` def plot(reader, tdata): '''function to plot the channels''' channels=[] for i in reader: channels.append(i) fig, ax = plt.subplots(len(channels)+1, sharex=False, figsize=(30,16), squeeze=False) plot=0 #where j is the channel name for i, j in enumerate(reader): y=reader["%s" % j] ylim=np.ceil(np.nanmax(y)) x=range(len((reader["%s" % j]))) ax[plot,0].plot(y, lw=1, color='b') ax[plot,0].set_title("%s" % j) ax[plot,0].set_xlabel('Time / s') ax[plot,0].set_ylabel('%s' % units[i]) ax[plot,0].set_ylim([np.nanmin(y), ylim+(ylim/100)*10]) plot=plot+1 ###here is the new subplot that doesn't want to share the x axis### ax[plot, 0].plot() plt.tight_layout() plt.show() ``` This code does NOT work because they are shareing the x-axis of the last subplot. The length of channels changes dependant onn what I specify earlier in the code. Is it a valid option to use `add_subplot` somehow, ever though I don't have a constant number of channels? thanks so much for any help EDIT Image for Joe:

Original source