Matplotlib对数Y轴柱状图Y轴标签显示不全的解决方法
解决Matplotlib中Y轴标签被截断的问题
问题描述
如何让下图中的Y轴标签完整显示?Matplotlib截断了部分Y轴标签。

代码示例
fig, ax = plt.subplots(1,1,figsize = (8,5)) sumsqrt_data ={'PI-ZN' : PI_ZN, 'PI-CHR' : PI_CHR, 'PI-AMIGO' : PI_AMIGO, 'PI-IMC' : PI_IMC, 'PI-SIMC' : PI_SIMC} courses = list(['PI-ZN', 'PI-CHR', 'PI-AMIGO', 'PI-IMC', 'PI-SIMC']) values = list([9975.229678280088, 16002.075925234263, 13022.883821302505, 11142.898237215246, 7633.880494079887]) ax.bar(courses, values) ax.set_yscale('log')
解决方法
下面提供三种实用方案,任选其一即可解决标签截断问题:
1. 自动调整布局(推荐)
在绘图代码末尾调用plt.tight_layout(),它会自动调整图表元素的间距,确保所有标签完整显示:
fig, ax = plt.subplots(1,1,figsize = (8,5)) # 原有绘图代码 sumsqrt_data ={'PI-ZN' : PI_ZN, 'PI-CHR' : PI_CHR, 'PI-AMIGO' : PI_AMIGO, 'PI-IMC' : PI_IMC, 'PI-SIMC' : PI_SIMC} courses = list(['PI-ZN', 'PI-CHR', 'PI-AMIGO', 'PI-IMC', 'PI-SIMC']) values = list([9975.229678280088, 16002.075925234263, 13022.883821302505, 11142.898237215246, 7633.880494079887]) ax.bar(courses, values) ax.set_yscale('log') # 添加自动布局代码 plt.tight_layout() plt.show()
2. 手动调整左边距
如果需要精准控制边距,可以使用plt.subplots_adjust()调整左侧留白,数值根据实际情况微调:
fig, ax = plt.subplots(1,1,figsize = (8,5)) # 原有绘图代码 sumsqrt_data ={'PI-ZN' : PI_ZN, 'PI-CHR' : PI_CHR, 'PI-AMIGO' : PI_AMIGO, 'PI-IMC' : PI_IMC, 'PI-SIMC' : PI_SIMC} courses = list(['PI-ZN', 'PI-CHR', 'PI-AMIGO', 'PI-IMC', 'PI-SIMC']) values = list([9975.229678280088, 16002.075925234263, 13022.883821302505, 11142.898237215246, 7633.880494079887]) ax.bar(courses, values) ax.set_yscale('log') # 手动调整左边距,left值可按需修改 plt.subplots_adjust(left=0.15) plt.show()
3. 初始化画布时启用约束布局
创建画布时设置constrained_layout=True,Matplotlib会动态调整布局,避免元素重叠或截断:
# 初始化画布时开启约束布局 fig, ax = plt.subplots(1,1,figsize = (8,5), constrained_layout=True) # 原有绘图代码 sumsqrt_data ={'PI-ZN' : PI_ZN, 'PI-CHR' : PI_CHR, 'PI-AMIGO' : PI_AMIGO, 'PI-IMC' : PI_IMC, 'PI-SIMC' : PI_SIMC} courses = list(['PI-ZN', 'PI-CHR', 'PI-AMIGO', 'PI-IMC', 'PI-SIMC']) values = list([9975.229678280088, 16002.075925234263, 13022.883821302505, 11142.898237215246, 7633.880494079887]) ax.bar(courses, values) ax.set_yscale('log') plt.show()
内容的提问来源于stack exchange,提问作者Rariusz
相关产品推荐
相关产品推荐

