如何用Python的matplotlib.pyplot基于SAKILA库SQL查询结果生成柱状图?
解决Matplotlib绘制电影分级柱状图的问题
问题分析
你的代码无法运行主要有两个核心问题:
plt.bar()函数需要两个必填参数:X轴数据和Y轴数据,你只传入了Y轴数据,参数不完整- DataFrame列名不匹配:SQL查询结果中数量列的名称是
COUNT(film_id),但你代码里用了number_of_films,会触发列不存在的报错
解决方案
步骤1:优化SQL查询(推荐)
给统计结果列起一个清晰的别名,方便后续代码调用:
SELECT rating, COUNT(film_id) AS number_of_films FROM film GROUP BY rating;
步骤2:编写正确的Matplotlib代码
传入完整的X轴(电影分级)和Y轴(影片数量)数据,同时添加必要的图表元素提升可读性:
import matplotlib.pyplot as plt # 假设df是从SQL查询结果加载得到的DataFrame plt.bar(df['rating'], df['number_of_films']) # 添加图表标签与标题 plt.xlabel('电影分级') plt.ylabel('影片数量') plt.title('各电影分级的影片数量统计') plt.show()
兼容原SQL查询的写法
如果不想修改SQL,可以直接使用原列名调用:
import matplotlib.pyplot as plt plt.bar(df['rating'], df['COUNT(film_id)']) plt.xlabel('电影分级') plt.ylabel('影片数量') plt.title('各电影分级的影片数量统计') plt.show()
排查小技巧
运行代码前可以先执行print(df.head()),确认DataFrame的列名和数据是否正确加载,避免因数据导入问题导致的隐藏错误。
内容的提问来源于stack exchange,提问作者c200402
相关产品推荐
相关产品推荐

