Python数据科学入门:如何使用Matplotlib避免柱状图重叠
解决pandas柱状图重叠问题:生成独立图表
嘿,作为Python数据科学新手,遇到这种绘图重叠的问题太常见啦!我来帮你搞定~
问题根源
你当前的代码会让两个柱状图重叠,是因为pandas的plot.bar()默认会复用当前活跃的matplotlib轴(Axes),两次连续调用就会把图画在同一个画布上,自然就叠在一起了。
解决方案:手动管理画布/轴
这里有两种常用的解决方式,你可以根据需求选择:
方式1:生成并排的子图(推荐,对比更直观)
这种方式会把两个柱状图放在同一个画布的左右子图里,方便直接对比。需要先导入matplotlib.pyplot,然后手动创建子图并指定绘图的轴:
import matplotlib.pyplot as plt def compare_groups(field): if field in less_equal_150_cal.columns: # 创建1行2列的子图,设置画布大小 fig, (ax_left, ax_right) = plt.subplots(1, 2, figsize=(12, 5)) # 给第一个子图绘制≤150卡路里的柱状图,指定轴为ax_left less_equal_150_cal[field].plot.bar( color='blue', alpha=0.4, title=f"{field} (≤150 Cal)", ax=ax_left ) # 给第二个子图绘制>150卡路里的柱状图,指定轴为ax_right more_150_cal[field].plot.bar( color='red', alpha=0.4, title=f"{field} (>150 Cal)", ax=ax_right ) # 自动调整子图间距,避免标题/标签重叠 plt.tight_layout() # 显示图形 plt.show() else: raise ValueError(f"{field} not found")
方式2:生成两个独立的画布窗口
如果你想要两个完全分开的独立窗口(比如分别查看),可以每次绘图前创建新的figure:
import matplotlib.pyplot as plt def compare_groups(field): if field in less_equal_150_cal.columns: # 创建第一个独立画布,绘制≤150卡路里的图 plt.figure() less_equal_150_cal[field].plot.bar( color='blue', alpha=0.4, title=f"{field} (≤150 Cal)" ) # 创建第二个独立画布,绘制>150卡路里的图 plt.figure() more_150_cal[field].plot.bar( color='red', alpha=0.4, title=f"{field} (>150 Cal)" ) # 显示所有图形 plt.show() else: raise ValueError(f"{field} not found")
关键知识点
- 核心是手动控制matplotlib的画布(Figure)和轴(Axes),避免pandas默认复用同一个轴。
plt.subplots()可以快速创建多个子图,适合对比展示;plt.figure()则会创建全新的独立画布。
内容的提问来源于stack exchange,提问作者Sudhir Sharma
相关产品推荐
相关产品推荐

