gustafbstrom
gustafbstrom

Reputation: 1933

matplotlib: Remove subplot padding when adding tick labels

I have an issue where adding tick labels interferes with my given padding preference between subplots. What I want, is a tight_layout with no padding at all in between, but with some custom ticks along the x-axis. This snippet and resulting figures shows the issue:

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec

fig_names = ['fig1']
gs = gridspec.GridSpec(1, len(fig_names))
gs.update(hspace=0.0)
figs = dict()

for fig_name in fig_names:
    figs[fig_name] = plt.figure(figsize=(3*len(fig_names),6))
    for i in range(0,len(fig_names)):
        ax = figs[fig_name].add_subplot(gs[i])
        ax.plot([0,1],[0,1], 'r-')
        if i != 0:
            ax.set_yticks(list())
            ax.set_yticklabels(list())
        ax.set_xticks(list())
        ax.set_xticklabels(list())

for name,fig in figs.items():
    fig.text(0.5, 0.03, 'Common xlabel', ha='center', va='center')
    gs.tight_layout(fig, h_pad=0.0, w_pad=0.0)
    ax = fig.add_subplot(gs[len(fig_names)-1])
    ax.legend(('Some plot'), loc=2)

plt.show()

No tick labels, no padding

By changing the corresponding lines into:

ax.set_xticks([0.5,1.0])
ax.set_xticklabels(['0.5','1.0'])

...unwanted padding is added to the graphs. Tick labels added, padding appears

How can I customize the tick text so that the graph plots has no padding, regardless of what tick text I enter? The text may "overlap" with the next subplot.

Upvotes: 0

Views: 1655

Answers (1)

unutbu
unutbu

Reputation: 879511

Perhaps you could simply create the axes with plt.subplots:

import numpy as np
import matplotlib.pyplot as plt

fig, axs = plt.subplots(ncols=2, sharey=True)
for ax in axs:
    ax.plot([0,1],[0,1], 'r-')
    ax.set_xticks([0.5,1.0])
    ax.set_xticklabels(['0.5','1.0'])
axs[-1].legend(('Some plot'), loc=2)
for ax in axs[1:]:
    ax.yaxis.set_visible(False)
fig.subplots_adjust(wspace=0)
plt.show()

enter image description here

Upvotes: 3

Related Questions