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

求助:Matplotlib绘制直方图仅显示坐标轴无图形内容的解决方法

问题分析与解决方案

你的直方图看不到内容,主要有两个核心问题:数据使用错误和坐标轴范围搞反了,我来一步步帮你解决:

1. 原代码的问题拆解

  • 你用plt.hist(val),但val是value_counts().values,也就是各年份的电影数量,直方图会把这些"数量值"当成统计对象,而不是按年份展示电影数量。
  • 你设置了plt.ylim([2006,2016]),把y轴范围设成了年份,但实际上y轴应该是电影数量,x轴才是年份。更糟的是:你的val最大值只有297,远小于2006,所以所有的直方图柱子都被挤出了y轴的显示范围,自然看不到任何内容!

2. 正确的实现方式

根据你的需求(展示各年份的电影数量),有两种合适的实现方式:

方式一:用条形图(最适合分类统计展示)

条形图专门用来展示不同类别(这里是年份)对应的数值(电影数量),代码如下:

import matplotlib.pyplot as plt

# 先按年份排序统计结果,让展示更直观
year_stats = movie['Year'].value_counts().sort_index()
years = year_stats.index
movie_counts = year_stats.values

plt.bar(years, movie_counts)
plt.xlabel('Year')  # 标注x轴为年份
plt.ylabel('Number of Movies')  # 标注y轴为电影数量
plt.xlim([2006, 2016])  # 设置x轴范围为目标年份区间
plt.xticks(range(2006, 2017))  # 显示每一年的刻度
plt.show()

方式二:用直方图(直接基于原始年份数据)

如果你坚持要用直方图,可以直接传入原始的Year列数据,让Matplotlib自动统计各年份的电影数量:

import matplotlib.pyplot as plt
import numpy as np

# 设置bins为每一年一个区间,确保统计准确
plt.hist(movie['Year'], bins=np.arange(2006, 2017))
plt.xlabel('Year')
plt.ylabel('Number of Movies')
plt.xticks(np.arange(2006, 2017))  # 显示完整年份刻度
plt.show()

两种方式都能正确显示你需要的年份-电影数量分布,选哪种取决于你的具体需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 16:22:37