Removendo rótulos de escala do eixo y para certos subplots em Matplotlib, Python

Aug 28 2020

Eu tenho uma figura com três subplots, e o eixo y para todos os subplots usa os mesmos rótulos de escala (eles são categóricos). Aqui está o código:

on_bus = business_changes[business_changes['Business characteristics']=='Ontario']
qu_bus = business_changes[business_changes['Business characteristics']=='Quebec']
fig, ax = plt.subplots(nrows=1, ncols=3, sharex=True, sharey=True, figsize=(20,10))
ax1 = plt.subplot(1,3,1) 
sns.barplot(x = business_changes.iloc[0,1:], y= business_changes.columns[1:])
plt.title("Changes made by businesses - Canada")
plt.subplot(1,3,2)
sns.barplot(x = on_bus.iloc[0,1:], y = on_bus.columns[1:])
plt.title("Changes by businesses - Ontario")
plt.subplot(1,3,3)
sns.barplot(x = qu_bus.iloc[0,1:], y = qu_bus.columns[1:])
plt.title("Changes by businesses - Quebec")
plt.show()

O enredo se parece com o seguinte:

Enredo

Quero remover os rótulos do eixo y dos dois últimos gráficos porque eles têm essencialmente os mesmos rótulos do primeiro. Com isso, não tenho que lutar por espaço e o gráfico ficaria mais organizado.

Respostas

3 Thomas Aug 27 2020 at 22:49

Minha abordagem seria usar axes.get_yaxis().set_visible(False). Então o seguinte:

f, axes = plt.subplots(1, 3)
ax1 = sns.barplot(x = business_changes.iloc[0,1:], y= business_changes.columns[1:], ax = [0])
plt.title("Changes made by businesses - Canada")
ax2 = sns.barplot(x = on_bus.iloc[0,1:], y = on_bus.columns[1:], ax = axes[1])
ax2.axes.get_yaxis().set_visible(False)
plt.title("Changes by businesses - Ontario")
ax3 = sns.barplot(x = qu_bus.iloc[0,1:], y = qu_bus.columns[1:], ax = axes[2])
plt.title("Changes by businesses - Quebec")
plt.show()

Caso contrário, tente encaixá-lo em seu script e definitivamente use o axes.get_yaxis().set_visible(False)e direcione os dois últimos gráficos. No meu caso, eu os defini como ax2e ax3e "direcionados" por nome.