Matplotlib柱状图Xticks重叠:如何加宽柱子间距解决pH刻度重叠
问题与解决方案:Matplotlib柱状图重叠问题处理
问题描述
使用Matplotlib绘制柱状图时,pH值6.5和6.52对应的柱子因数值过于接近出现重叠,同时X轴刻度也存在重叠问题。原代码如下:
pH = [ 4.5 , 5. , 5.1 , 5.4 , 5.6 , 5.7 , 6. , 6.3 , 6.5 , 6.52, 6.7 , 6.8 , 6.9 , 7. , 7.1 , 7.2 , 7.3 , 7.4 , 7.5 , 7.6 , 7.8 , 8. , 8.1 , 8.2 , 8.3 , 8.5 , 8.7 , 9. , 9.2 , 9.6 , 9.8 , 9.9 , 10. ] pH_count = [ 8, 3, 1, 2, 3, 1, 109, 2, 9, 1, 2, 4, 11, 119, 6, 16, 2, 30, 27, 1, 43, 71, 1, 2, 1, 8, 4, 27, 9, 3, 2, 2, 50] fig, ax = plt.subplots(figsize = (10,4)) ax.bar(pH, pH_count, width = 0.1) ax.set_xticks(pH) plt.xticks(rotation = 90) ax.set_ylabel("count") ax.set_xlabel('pH') plt.show()
当前图表中,6.5与6.52的柱子完全重叠,X轴刻度因数量多且部分数值接近,旋转90度后仍显得拥挤。
解决方案
加宽柱子间距无法解决该问题——因为当前X轴是连续数值轴,6.5和6.52本身的数值间距极小,加宽柱子宽度反而会加剧重叠。正确的处理方式是将X轴转换为分类轴,把每个pH值当作独立类别而非连续数值:
修改后的代码
import matplotlib.pyplot as plt pH = [ 4.5 , 5. , 5.1 , 5.4 , 5.6 , 5.7 , 6. , 6.3 , 6.5 , 6.52, 6.7 , 6.8 , 6.9 , 7. , 7.1 , 7.2 , 7.3 , 7.4 , 7.5 , 7.6 , 7.8 , 8. , 8.1 , 8.2 , 8.3 , 8.5 , 8.7 , 9. , 9.2 , 9.6 , 9.8 , 9.9 , 10. ] pH_count = [ 8, 3, 1, 2, 3, 1, 109, 2, 9, 1, 2, 4, 11, 119, 6, 16, 2, 30, 27, 1, 43, 71, 1, 2, 1, 8, 4, 27, 9, 3, 2, 2, 50] # 创建索引作为分类轴的x坐标 x_indices = range(len(pH)) fig, ax = plt.subplots(figsize=(12, 4)) # 加宽画布宽度,优化刻度显示 # 使用索引绘制柱状图,设置合适的柱子宽度 ax.bar(x_indices, pH_count, width=0.8) # 设置X轴刻度为索引,刻度标签为原始pH值 ax.set_xticks(x_indices) ax.set_xticklabels(pH, rotation=90) ax.set_ylabel("count") ax.set_xlabel('pH') plt.tight_layout() # 自动调整布局,避免标签被截断 plt.show()
修改说明
- 用
range(len(pH))生成的索引代替原始pH值作为x坐标,确保每个柱子间距均等,彻底解决数值接近导致的柱子重叠问题 - 加宽画布宽度(
figsize=(12,4))并使用plt.tight_layout(),避免X轴刻度标签被截断或拥挤 - 调整柱子宽度为0.8,让柱子之间保留合适的空隙,同时充分利用分类轴的空间
内容的提问来源于stack exchange,提问作者Kiki
相关产品推荐
相关产品推荐

