如何解决Seaborn PairGrid子图仅底部显示X轴标签的问题?
Seaborn PairGrid 子图X轴标签仅底部显示的解决办法
问题
为Seaborn PairGrid的每个子图设置独立X轴标签后,仅最底部子图的X轴标签显示,其余子图的标签不显示。
原始代码
g = sns.PairGrid(dat,x_vars = inputs, y_vars = outputs, hue = 'variable') def scatter_plt(x, y, *a, **kw): if x.equals(y): kw["color"] = (0, 0, 0, 0) plt.scatter(x, y,*a, **kw) plt.xticks(rotation=90) plt.subplots_adjust(wspace=0.4, hspace=0.4) g.map(scatter_plt)
已尝试的无效代码
xlabels,ylabels = [],[] for ax in g.axes[-1,:]: xlabel = ax.xaxis.get_label_text() xlabels.append(xlabel) for ax in g.axes[:,0]: ylabel = ax.yaxis.get_label_text() ylabels.append(ylabel) for i in range(len(xlabels)): for j in range(len(ylabels)): g.axes[j,i].xaxis.set_label_text(xlabels[i]) g.axes[j,i].yaxis.set_label_text(ylabels[j])
解决代码
g = sns.PairGrid(dat,x_vars = inputs, y_vars = outputs, hue = 'variable') def scatter_plt(x, y, *a, **kw): if x.equals(y): kw["color"] = (0, 0, 0, 0) plt.scatter(x, y,*a, **kw) plt.xticks(rotation=90) plt.subplots_adjust(wspace=0.4, hspace=0.4) g.map(scatter_plt) # 提取底部行的X轴标签文本 xlabels = [ax.get_xlabel() for ax in g.axes[-1, :]] # 遍历所有子图,设置X轴标签并开启可见性 for col_idx in range(len(xlabels)): for row_idx in range(g.axes.shape[0]): ax = g.axes[row_idx, col_idx] ax.set_xlabel(xlabels[col_idx]) ax.xaxis.label.set_visible(True) # 同理处理Y轴标签(按需启用) # ylabels = [ax.get_ylabel() for ax in g.axes[:, 0]] # for row_idx in range(len(ylabels)): # for col_idx in range(g.axes.shape[1]): # ax = g.axes[row_idx, col_idx] # ax.set_ylabel(ylabels[row_idx]) # ax.yaxis.label.set_visible(True)
关键说明
Seaborn PairGrid默认会隐藏非底部行的X轴标签和非左侧列的Y轴标签,目的是避免重复标签造成视觉混乱。所以即使你手动设置了标签文本,还需要调用ax.xaxis.label.set_visible(True)来强制显示每个子图的标签。
内容的提问来源于stack exchange,提问作者Sherwin R
相关产品推荐
相关产品推荐

