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

Python matplotlib绘制第二张直方图叠加第一张数据问题求解

问题原因
  • matplotlib默认会复用当前活跃的画布对象,绘制完第一张评分直方图后没有清空画布,直接绘制第二张年份直方图时,新的直方图会直接叠加在原有画布的内容上,最终导致years.png里同时出现了两次统计的结果。
修复方案

方案1:绘制完第一张图后清空画布

在plt.savefig('ratings.png')后面加一行plt.clf()清空当前画布的所有内容,再绘制第二张图即可,修改后的核心代码段:

rate_hist = plt.hist(ratings, bins=10)
plt.title('Ratings')
plt.xlabel('Ratings')
plt.ylabel('Movies count')
plt.savefig('ratings.png')
plt.clf() # 新增:清空当前画布

year_hist = plt.hist(years, bins=50)
plt.title('Years')
plt.xlabel('Years')
plt.xticks(rotation=90, fontsize=4)
plt.ylabel('Movies count')
plt.savefig('years.png')

方案2:每次绘图前创建独立画布

在绘制每张图前都调用plt.figure()创建独立的新画布,从根源上避免内容叠加,修改后的核心代码段:

# 绘制评分直方图
plt.figure() # 新建第一张独立画布
rate_hist = plt.hist(ratings, bins=10)
plt.title('Ratings')
plt.xlabel('Ratings')
plt.ylabel('Movies count')
plt.savefig('ratings.png')

# 绘制年份直方图
plt.figure() # 新建第二张独立画布
year_hist = plt.hist(years, bins=50)
plt.title('Years')
plt.xlabel('Years')
plt.xticks(rotation=90, fontsize=4)
plt.ylabel('Movies count')
plt.savefig('years.png')
额外优化建议
  • 原代码中years.sort()放在循环体内,每次新增年份都做一次全量排序,效率很低,可以把这行移到循环结束之后,只排序一次即可。
  • 读取年份的时候可以转成int类型,避免直方图排序时按照字符串排序出现逻辑错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 22:15:04