You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matplotlib小提琴图Y轴刻度与绘图区域重叠问题求助

问题:Matplotlib小提琴图绘图区域与Y轴刻度标签重叠,如何整体右移解决?

小提琴图重叠问题

用户使用的代码如下:

alp = 1
fig, axes = plt.subplots(nrows=10, ncols=1, figsize=(8, 6), dpi=100)#, sharex=True)
for i,t in enumerate(top_features):
  # print(i)
  alp = alp - 0.08
  parts = axes[i].violinplot(data[i], vert=False, widths=0.9,
                      showmeans=True, showextrema=True, showmedians=False,
                      bw_method='scott')#, points=200)
  for pc in parts['bodies']:
    pc.set_facecolor('#D43F3A')
    pc.set_edgecolor('black')
    pc.set_alpha(alp)
  axes[i].set_ylabel('{:.3f}'.format(top_features[i]), rotation=0)

  # axes[i].axis('off')
  axes[i].set_xlim(-0.0010, 0.0030)
  axes[i].spines['top'].set_visible(False)
  axes[i].spines['right'].set_visible(False)
  axes[i].spines['bottom'].set_visible(False)
  axes[i].spines['left'].set_visible(False)

for i, ax in enumerate(axes):
    if i !=9:
      ax.set_xticks([])
    ax.set_yticks([])
fig.tight_layout()
fig.subplots_adjust(left=0.01,right= 1.1, hspace=0.14, wspace=0.3)
ax.set_yticklabels(top_features)

问题:制作的小提琴图出现绘图区域与Y轴刻度标签重叠的情况,请问如何将所有小提琴图及共享X轴刻度整体向右移动以解决该问题?


解决方案

可以通过调整布局参数和标签设置解决重叠问题,具体操作如下:

  • 调整子图左侧边距:当前left=0.01的设置过于靠左,直接增大该值给Y轴标签留出足够空间,同时调整right值避免内容超出画布。单列布局无需设置wspace,可移除:

    fig.subplots_adjust(left=0.15, right=0.95, hspace=0.14)
    
  • 移除冲突的自动布局调用:fig.tight_layout()会自动调整间距,和手动设置的subplots_adjust存在冲突,建议注释或删除这一行。

  • 优化Y轴标签间距:给旋转0度的Y轴标签添加labelpad参数,增加标签与绘图区域的距离:

    axes[i].set_ylabel('{:.3f}'.format(top_features[i]), rotation=0, labelpad=20)
    
  • 修正刻度标签设置:当前仅最后一个轴设置了yticklabels,前面的轴已隐藏yticks,保持该逻辑即可,确保布局调整后标签正常显示。

修改后的完整代码示例:

alp = 1
fig, axes = plt.subplots(nrows=10, ncols=1, figsize=(8, 6), dpi=100)#, sharex=True)
for i,t in enumerate(top_features):
  alp = alp - 0.08
  parts = axes[i].violinplot(data[i], vert=False, widths=0.9,
                      showmeans=True, showextrema=True, showmedians=False,
                      bw_method='scott')
  for pc in parts['bodies']:
    pc.set_facecolor('#D43F3A')
    pc.set_edgecolor('black')
    pc.set_alpha(alp)
  # 设置Y轴标签并增加间距
  axes[i].set_ylabel('{:.3f}'.format(top_features[i]), rotation=0, labelpad=20)

  axes[i].set_xlim(-0.0010, 0.0030)
  # 批量隐藏边框
  axes[i].spines[['top', 'right', 'bottom', 'left']].set_visible(False)

for i, ax in enumerate(axes):
    if i !=9:
      ax.set_xticks([])
    ax.set_yticks([])

# 调整布局参数
fig.subplots_adjust(left=0.15, right=0.95, hspace=0.14)
# 设置最后一个轴的Y刻度标签
ax.set_yticklabels(top_features)

plt.show()

内容的提问来源于stack exchange,提问作者banikr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 23:01:35