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

如何解决Matplotlib对比图表重叠问题并提升可读性?

解决Matplotlib双列柱状图重叠及可读性优化问题

问题分析

当前图表出现重叠,核心原因是子图间距设置过小(wspace=0.1),且第二个子图的柱状图参数(负宽度+边缘对齐)导致布局挤压。以下是修复后的代码及针对性优化方案:

修复并优化后的代码

import matplotlib.pyplot as plt

# 定义数据
exhaustive_search = [72, 9139]
genetic_algorithm = [52.8, 200]
algorithms = ['穷举搜索', '遗传算法']

# 创建画布与子图,设置合适的画布尺寸
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 6))

# 调整子图间距,避免元素重叠
fig.subplots_adjust(wspace=0.3)

# 绘制执行时间柱状图
ax1.bar(algorithms, [exhaustive_search[0], genetic_algorithm[0]], width=0.6, color='#1f77b4')
ax1.set_xlabel('算法类型', fontsize=12)
ax1.set_ylabel('执行时间 (秒)', fontsize=12)
ax1.set_title('执行时间对比', fontsize=14)
# 为柱子添加数值标签
for i, v in enumerate([exhaustive_search[0], genetic_algorithm[0]]):
    ax1.text(i, v + 1, str(v), ha='center', fontsize=10)

# 绘制解数量柱状图
ax2.bar(algorithms, [exhaustive_search[1], genetic_algorithm[1]], width=0.6, color='#ff7f0e')
ax2.set_xlabel('算法类型', fontsize=12)
ax2.set_ylabel('解的数量', fontsize=12)
ax2.set_title('解数量对比', fontsize=14)
# 为柱子添加数值标签
for i, v in enumerate([exhaustive_search[1], genetic_algorithm[1]]):
    ax2.text(i, v + 50, str(v), ha='center', fontsize=10)
# 针对数值差距过大的情况,启用对数刻度
ax2.set_yscale('log')

# 设置全局标题
fig.suptitle('穷举搜索与遗传算法性能对比', fontsize=16, y=1.02)

# 自动调整布局,避免标签截断
plt.tight_layout()
plt.show()

关键优化点

  • 解决重叠问题:将子图间距wspace调整为0.3,移除align='edge'和负宽度的非常规设置;添加plt.tight_layout()自动适配布局,避免标签被截断。
  • 提升可读性:
    • 替换为中文标签,贴合阅读习惯;
    • 给每个柱子添加数值标签,直观展示具体数值;
    • 针对解数量差距极大的场景,启用对数刻度,避免遗传算法的柱子被压缩至几乎不可见;
    • 为两个子图的柱子设置不同颜色,区分主题;
    • 增大标题、标签的字体尺寸,提升整体清晰度;
    • 调整全局标题位置,避免与子图标题重叠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 20:05:17