刻度和标签仅在某些子图中删除

时间:2019-11-28 11:03:27

标签: python matplotlib boxplot subplot

我想在x轴上创建仅带有刻度和标签的箱形图(水平)。但是,当循环到达轴= 12时,即使将其从轴= 1移到了轴= 11,它也会在y轴上添加刻度和标签。

为什么会这样?请参见下面的行为图片。 enter image description here

代码:

import matplotlib.pyplot as plt
import seaborn as sns
fig,axs = plt.subplots(12,3,figsize=(15,50),dpi=200)
fig.suptitle("Box plot for all 34 features",fontsize=16)
fig.tight_layout()
plt.subplots_adjust(top=0.96)

i=1
for column in undersampled_data:

    if (column == 'TimeStamp' or column == 'Status'):
        continue
    ax = fig.add_subplot(12,3,i)
    ax.set_title(column)
    sns.boxplot(undersampled_data[column],palette="Set2")
    ax.set_xlabel('')

    # Removing y ticks and y labels
    frame1 = plt.gca()
    frame1.axes.yaxis.set_ticklabels([])
    frame1.axes.get_yaxis().set_ticks([])

    print(i ," ",column)
    i+=1

for j in range(0,(len(axs)-1)):
    fig.delaxes(axs.flatten()[j])

fig.subplots_adjust(hspace=0.4)

1 个答案:

答案 0 :(得分:0)

我可以重现您的问题,但我不知道是什么导致了此问题。这可能与图形轴的重新定义有关。如果使用plt.subplots,则以后不应调用fig.add_subplot,而应使用存储的轴对象。您可以从以下简化示例开始:

fig, axs = plt.subplots(12,3,figsize=(15,50),dpi=200)
axs = axs.flatten() # convert from (12, 3) to (36,)
fig.suptitle("Box plot for all 34 features",fontsize=16)
fig.tight_layout()
plt.subplots_adjust(top=0.96)

for i in range(36):
    axs[i].set_title('test')
    axs[i].plot([1], [1], 'ro')
    axs[i].set_xlabel('')

    axs[i].yaxis.set_ticklabels([])
    axs[i].yaxis.set_ticks([])

fig.subplots_adjust(hspace=0.4)