聚类饼图分组值:房屋建造年份数据的饼图可视化优化咨询
解决房屋建造年份数据饼图拥挤问题:15年区间分组方案
原数据按单个年份分组后有143个类别,导致饼图杂乱,下面提供两种按15年区间分组的可行方案:
方案一:用pd.cut()自动划分连续区间(推荐)
利用pandas的区间划分工具快速生成15年分组,代码简洁且易维护:
import pandas as pd import matplotlib.pyplot as plt # 原分组数据:testing = df1.groupby("Year Built").size() # 将年份索引转为数值型 years = testing.index.astype(int) # 设置15年区间的边界(从1870到2020,覆盖1873-2018) bins = range(1870, 2021, 15) # 自定义区间标签(比如把[1870,1885)显示为"1870-1884") labels = [f"{start}-{start+14}" for start in bins[:-1]] # 划分年份到对应区间 year_groups = pd.cut(years, bins=bins, right=False, labels=labels) # 按区间重新统计数量 grouped_data = testing.groupby(year_groups).sum() # 绘制优化后的饼图 grouped_data.plot.pie(autopct="%.2f%%", figsize=(10,10)) plt.ylabel(None) plt.title("房屋建造年份分布(15年区间分组)") plt.show()
关键说明
right=False设置区间为左闭右开,确保每个15年区间刚好包含15个年份(如1870-1884对应[1870,1885))- 自动生成的标签清晰直观,无需手动逐个定义区间
方案二:手动定义分组规则(适合特殊区间需求)
如果需要调整部分区间范围,可以手动创建分组映射:
import pandas as pd import matplotlib.pyplot as plt # 自定义15年区间分组规则 group_map = { "1870-1884": range(1870, 1885), "1885-1899": range(1885, 1900), "1900-1914": range(1900, 1915), "1915-1929": range(1915, 1930), "1930-1944": range(1930, 1945), "1945-1959": range(1945, 1960), "1960-1974": range(1960, 1975), "1975-1989": range(1975, 1990), "1990-2004": range(1990, 2005), "2005-2019": range(2005, 2020) } # 匹配年份到对应分组 def get_group(year): year_int = int(year) for group_name, year_range in group_map.items(): if year_int in year_range: return group_name return "其他" # 按分组统计数量 grouped_data = testing.groupby(lambda x: get_group(x)).sum() # 绘制饼图 grouped_data.plot.pie(autopct="%.2f%%", figsize=(10,10)) plt.ylabel(None) plt.show()
内容的提问来源于stack exchange,提问作者umba
相关产品推荐
相关产品推荐

