基于Pandas DataFrame绘制目标Matplotlib柱状图的技术求助
问题描述
数据集信息
我的电影数据集Pandas DataFrame示例(count字段代表单部电影计数):
| yearOfRelease | count |
|---|---|
| 1989 | 1 |
| 1990 | 1 |
| 1991 | 1 |
| 1992 | 1 |
| 1993 | 1 |
此前该数据集为Spark DataFrame,通过以下代码转换为Pandas DataFrame:
pandasDF = movies_DF.toPandas() pandasDF.head()
图表对比
- 当前生成的柱状图:

- 目标柱状图样式:

当前代码
x = list(pandasDF[pandasDF['yearOfRelease'] >= '1990']['yearOfRelease']) import matplotlib.pyplot as plt plt.figure() pd.value_counts(x).plot.bar(title="number of movies by year of release ") plt.xlabel("yearOfRelease") plt.ylabel("numOfMovies") plt.show()
需求
请指导如何调整代码以生成目标样式的柱状图。
代码调整方案
直接修改代码如下,即可匹配目标图表样式:
import matplotlib.pyplot as plt import pandas as pd # 筛选1990年及以后的数据,保留原count字段 filtered_df = pandasDF[pandasDF['yearOfRelease'] >= '1990'] plt.figure() # 基于原数据的年份和count绘制柱状图,保证年份顺序正确 plt.bar(filtered_df['yearOfRelease'], filtered_df['count'], color='#1f77b4') # 配置标题和坐标轴标签,对齐目标图格式 plt.title('Number of Movies by Year of Release', pad=20, fontsize=12) plt.xlabel('Year of Release', fontsize=10) plt.ylabel('Number of Movies', fontsize=10) # 给每个柱子添加顶部数值标签 for idx, val in enumerate(filtered_df['count']): plt.text(idx, val + 0.05, str(val), ha='center') plt.tight_layout() plt.show()
关键调整说明
- 放弃
pd.value_counts():原数据已自带count统计字段,直接使用可避免打乱年份排序 - 改用
plt.bar()原生绘制:比DataFrame内置的plot方法更灵活,便于自定义样式 - 添加柱子顶部数值标签:匹配目标图的显示细节
- 优化标题、标签的间距和字体,让图表布局更整洁
内容的提问来源于stack exchange,提问作者pang sai
相关产品推荐
相关产品推荐

