如何在直方图显示年份?交易数-年份直方图绘制错误求助
问题分析与修改方案
你的代码存在几个核心问题:
- 误用了直方图(
hist):直方图是用来统计数据分布的,而你要展示年份与对应交易数量的对应关系,应该用柱状图(用横向柱状图barh匹配你要的轴方向)。 plt.plot([2006,2007,2008,2009,2010])仅传入了一组数值,Matplotlib默认将其作为y值,x轴自动生成0-4的索引,所以画出了直线,且完全没和交易数量关联。- 轴标签设置错误,你需要年份在y轴、交易数量在x轴,需要用横向柱状图来实现。
假设你的数据集d2包含year(年份)、flat_type(户型)、transactions(交易数量)三列,修改后的代码如下:
import matplotlib.pyplot as plt # 筛选1 room的年份和对应交易数量 room1_data = d2[d2['flat_type'] == '1 room'][['year', 'transactions']] # 按年份排序(可选,让图表更规整) room1_data = room1_data.sort_values('year') plt.figure(figsize=(10,6)) # 用横向柱状图,y轴是年份,x轴是交易数量 plt.barh(room1_data['year'], room1_data['transactions'], alpha=0.5, color='blue') plt.title("1 room Transactions by Year", fontsize=15) plt.xlabel('Number of transactions', fontsize=15) plt.ylabel('Year', fontsize=15) # 显示每个柱子的数值(可选,增强可读性) for y, x in zip(room1_data['year'], room1_data['transactions']): plt.text(x + 5, y, str(x), va='center') plt.tight_layout() plt.show()
关键修改点说明:
- 用
barh替代hist:横向柱状图天然适合将分类(年份)放在y轴,数值(交易数量)放在x轴的需求。 - 直接从数据集中关联年份和交易数量:确保每个年份对应正确的交易数值,而不是手动写死年份列表。
- 修正轴标签:将
ylabel设为年份,xlabel设为交易数量,符合你的需求。 - 移除了多余的
plt.plot语句:那条直线是错误操作导致的,完全不需要。
如果你的数据集里没有year列,需要先确认数据中存储年份的字段名称,替换代码中的year即可。
内容的提问来源于stack exchange,提问作者unleasehed
相关产品推荐
相关产品推荐

