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

聚类饼图分组值:房屋建造年份数据的饼图可视化优化咨询

解决房屋建造年份数据饼图拥挤问题: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 02:55:16