数据分析项目报告B 站风格世界人口动态排序轮播图项目概述1.1 项目背景动态排序轮播图Bar Chart Race是数据可视化领域的经典形式尤其在 B 站等视频平台广受欢迎。本项目旨在通过 Python 数据分析与可视化技术完整复刻高质量的世界人口年度动态排序轮播图展示 1960 年至 2024 年间世界各国人口总数的历史变迁。1.2 项目目标数据纯净完整剔除大洲、收入组、地区汇总等非国家数据仅保留 195 个真实主权国家。动态展示图表自动按年份轮播每年严格按人口总数降序排列人口越多的国家越靠图表上方。全交互体验支持悬浮显示具体人口数值、暂停 / 播放控制、手动切换年份。商业级美化采用深色背景、动态配色、圆角数值标签及丝滑轮播节奏达到 B 站专业级可视化标准。技术栈与运行环境编程语言Python 3.x数据处理pandas用于数据读取、清洗、宽表转换数据可视化pyechartsBar 柱状图 Timeline 时间轮播组件前端配置JsCode用于实现动态颜色映射、CDN 镜像配置解决国内网络加载空白问题python运行1. 导入核心工具import pandas as pd # 数据处理库from pyecharts.charts import Bar, Timeline # 柱状图、时间轮播组件from pyecharts import options as opts # 配置项工具from pyecharts.globals import ThemeType, CurrentConfig # 内置主题、CDN配置from pyecharts.commons.utils import JsCode # 动态颜色JS工具修复CDN解决国内网络HTML空白问题国内运行必加CurrentConfig.ONLINE_HOST “https://cdn.jsdelivr.net/npm/echarts5.4.3/dist/”3. 数据获取与探查阶段 13.1 数据加载项目读取本地 CSV 文件 世界人口数据-中文版1960-2024.csv由于文件中包含中文字符读取时需指定编码为 gbk避免乱码问题。python运行2. 读取中文版人口数据集df pd.read_csv(‘./data/世界人口数据-中文版1960-2024.csv’, encoding‘gbk’)df.head()3.2 数据结构探查通过 df.info() 探查数据集的基础结构样本量266 行包含国家及各类汇总区域70 列特征量4 列属性Country Name 国家名称、Country Code 国家代码、Indicator Name 指标名称、Indicator Code 指标代码 66 列时间序列1960-2025 年的数值列其中 2025 年数据全为 NaN有效数据区间为 1960-2024 年python运行df.info()4. 数据清洗与预处理阶段 2原始数据为宽格式一行一个国家多年年份平铺为多列且包含大量非主权国家的汇总数据无法直接用于绘图。预处理分为以下核心步骤4.1 提取目标列通过列表推导式筛选出所有列名为纯数字的列作为年份列 year_cols保留 4 个属性列作为 attr_cols。python运行通过筛选式筛选出所有列名为纯数字的列作为年份列year_cols [i for i in df.columns if i.isdigit()]attr_cols [‘Country Name’, ‘Country Code’, ‘Indicator Name’, ‘Indicator Code’]4.2 剔除无效与汇总数据核心清洗删除空值直接删除 Country Name 为 NaN 的行此类行通常为 AFE/AFW 等大洲汇总。黑名单过滤定义包含 40 项的 black_list涵盖全球及大洲汇总如 “世界”、“东亚与太平洋地区”、收入等级分类如 “高收入国家”、非主权地区 / 领地如阿鲁巴、中国香港特别行政区等通过 ~df[“Country Name”].isin(black_list) 进行反向过滤最终精准保留 195 个真实主权国家。python运行定义黑名单剔除大洲、收入组、地区汇总、非主权地区等无效数据black_list [# 全球大洲汇总“世界”, “北美”, “东亚与太平洋地区”, “欧洲与中亚地区”,“东亚与太平洋地区(不包括高收入)”, “欧洲与中亚地区(不包括高收入)”,“拉丁美洲与加勒比海地区”, “拉丁美洲与加勒比海地区(不包括高收入)”,“中东、北非、阿富汗与巴基斯坦”, “中东与北非地区(不包括高收入)”,“撒哈拉以南非洲地区”, “撒哈拉以南非洲地区(不包括高收入)”,“南亚”, “小国”, “加勒比小国”, “太平洋岛国”, “其他小国”,“未分类国家”, “阿拉伯联盟国家”, “欧洲联盟”, “欧洲货币联盟”,# 收入等级分类“经合组织成员”, “重债穷国(HIPC)”, “脆弱和受衝突影響的情况下”,“高收入国家”, “低收入国家”, “中等收入国家”,“中高等收入国家”, “中低等收入国家”, “中低收入国家”,# 人口红利分类“早人口紅利”, “后期人口紅利”, “預人口紅利”, “人口紅利之後”,# 世界银行分组“最不发达国家:联合国分类”, “IBRD与IDA”, “只有IBRD”, “只有IDA”,“IDA總”, “IDA混合”, “东亚与太平洋地区(IBRD与IDA)”,“欧洲与中亚地区(IBRD与IDA)”, “拉丁美洲与加勒比海地区(IBRD与IDA)”,“中东与北非地区(IBRD与IDA)”, “南亚(IBRD与IDA)”,“撒哈拉以南非洲地区(IBRD与IDA)”,# 非主权地区/海外领地“阿鲁巴”, “美属萨摩亚”, “海峡群岛”, “法罗群岛”, “直布罗陀”,“格陵兰”, “关岛”, “中国香港特别行政区”, “中国澳门特别行政区”,“圣马丁(法属)”, “圣马丁(荷属)”, “北马里亚纳群岛”, “新喀里多尼亚”,“波多黎各”, “百慕大”, “库拉索”, “开曼群岛”, “约旦河西岸和加沙”,“法属波利尼西亚”, “特克斯科斯群岛”, “英維爾京群岛”,“美维京群岛”, “科索沃”]过滤黑名单数据仅保留主权国家df df[~df[“Country Name”].isin(black_list)].reset_index(dropTrue)print(“过滤后剩余国家数量:”, df[“Country Name”].nunique())4.3 宽表转长表Reshape使用 pd.melt() 函数将数据转换为适合时序分析的长格式id_vars保持不变的属性列国家、编码等value_vars需要展开的年份列生成新列Year年份和 Population人口数值python运行melt 宽转长df_long pd.melt(df,id_varsattr_cols,value_varsyear_cols,var_name“Year”,value_name“Population”)df_long.head()4.4 数据类型转换与最终清理将 Year 列转换为 int 类型将 Population 列转换为 numeric 类型并使用 dropna() 删除转换后产生的空值如 2025 年的 NaN 数据最终得到包含 12675 条有效记录的干净数据集仅保留 Country Name, Year, Population 三列python运行最终数据整理、类型转换、去空值消除警告写法df_clean df_long[[“Country Name”, “Year”, “Population”]].copy()df_clean.loc[:, “Year”] df_clean[“Year”].astype(int)df_clean.loc[:, “Population”] pd.to_numeric(df_clean[“Population”])df_clean df_clean.dropna()df_clean.head()5. 数据可视化与迭代优化阶段 4-65.1 单年份横向柱状图测试阶段 4以 1990 年为例进行原型测试筛选 1990 年数据按人口降序排列并取前 20 名使用 pyecharts.Bar 绘制启用 reverse_axis() 将柱状图横向放置配置深色主题 ThemeType.DARK确保标签显示在柱子右侧position“right”验证基础渲染逻辑无误。python运行4. 单年份1990年柱状图测试test_df df_clean[df_clean[“Year”] 1990]按人口降序取前20名test_df test_df.sort_values(by“Population”, ascendingFalse).head(20)bar_test (Bar(init_optsopts.InitOpts(themeThemeType.DARK)).add_xaxis(test_df[“Country Name”].tolist()).add_yaxis(“人口”, test_df[“Population”].tolist()).reversal_axis().set_global_opts(title_optsopts.TitleOpts(title“1990年世界人口排名”, pos_left“center”),legend_optsopts.LegendOpts(is_showFalse)).set_series_opts(label_optsopts.LabelOpts(position“right”)))渲染为HTML文件 / Notebook预览bar_test.render(“bar_test.html”)bar_test.render_notebook()5.2 Timeline 轮播基础版阶段 5遍历清洗后的所有唯一 Year每年动态生成一个 Bar 实例并通过 Timeline.add() 方法将其按年份追加到时间轴中配置基础轮播参数is_auto_playTrue, play_interval600毫秒, is_loop_playTrue导出为 人口轮播_中文_基础版.html验证时序动画连续性。python运行5. 基础版 年份轮播图year_list df_clean[“Year”].unique().tolist()初始化时间线timeline Timeline(init_optsopts.InitOpts(width“1500px”,height“820px”,themeThemeType.DARK))遍历每一个年份生成柱状图并加入时间线for year in year_list:data_df df_clean[df_clean[“Year”] year]# 先降序取前20再升序配合反转轴实现从上到下人口递减data_df data_df.sort_values(by“Population”, ascendingFalse).head(20)data_df data_df.sort_values(by“Population”, ascendingTrue)country data_df[Country Name].tolist() population data_df[Population].tolist() bar ( Bar(init_optsopts.InitOpts(themeThemeType.DARK)) .add_xaxis(country) .add_yaxis(人口, population) .reversal_axis() .set_global_opts( title_optsopts.TitleOpts(titlef{year}年世界人口排名, pos_leftcenter), legend_optsopts.LegendOpts(is_showFalse) ) .set_series_opts( label_optsopts.LabelOpts(positionright) ) ) timeline.add(bar, str(year))配置轮播规则自动播放、间隔600ms、循环播放timeline.add_schema(is_auto_playTrue,play_interval600,is_loop_playTrue)导出文件timeline.render(“基础轮播图.html”)timeline.render_notebook()5.3 B 站风格深度美化完整版阶段 6为达到商业级可视化标准对基础版进行了全方位升级1.画布与背景优化尺寸调整为 1600px * 850px背景色设为极深灰 #080808提升沉浸感。2动态配色系统引入 JsCode定义包含 8 种高饱和度颜色的数组通过 params.dataindex % colorArr.length 算法使不同排名的国家柱子呈现动态循环色彩视觉冲击力更强。3.排序逻辑精调先按人口降序取前 20 名再按人口升序排列ascendingTrue原理配合 reverse_axis()升序列表的最后一项人口最多在反转 Y 轴后会精准显示在图表的最上方符合人类阅读习惯。4.图表细节打磨柱子样式设置 opacity0.85 增加质感border_radius7 实现圆角效果标签样式字体设为白色字号 11格式化显示为 “{c} 人”提示框tooltip定制 HTML 模板悬浮时清晰展示国家与数值。5.时间轴Timeline专属美化进度条颜色设为亮蓝色 #00a1ff线宽加粗至 4当前激活年份的节点设为带白色边框的蓝色圆点字体加粗提升交互反馈的清晰度播放间隔微调至 600ms节奏更丝滑。python运行6. B站风格 深度美化版 动态人口轮播图初始化时间线 深色背景画布timeline Timeline(init_optsopts.InitOpts(width“1600px”,height“850px”,themeThemeType.DARK,bg_color“#080808”))定义JS动态配色方案柱子循环变色color_js JsCode(“”function (params){let c [‘#ff4757’,‘#ffa502’,‘#fffa65’,‘#2ed573’,‘#1e90ff’,‘#3742fa’,‘#a55eea’];return c[params.dataIndex % c.length];}“”)获取所有年份year_list df_clean[“Year”].unique().tolist()循环生成每年图表for year in year_list:data_df df_clean[df_clean[“Year”] year]data_df data_df.sort_values(by“Population”, ascendingFalse).head(20)data_df data_df.sort_values(by“Population”, ascendingTrue)country data_df[Country Name].tolist() population data_df[Population].tolist() bar ( Bar(init_optsopts.InitOpts(themeThemeType.DARK)) .add_xaxis(country) .add_yaxis( series_name人口, y_axispopulation, itemstyle_optsopts.ItemStyleOpts( colorcolor_js, opacity0.85, border_radius7 ) ) .reversal_axis() .set_global_opts( title_optsopts.TitleOpts( titlef{year}年世界人口排名, pos_leftcenter, textstyle_optsopts.TextStyleOpts(color#ffffff, font_size20) ), legend_optsopts.LegendOpts(is_showFalse), # 悬浮提示框 tooltip_optsopts.TooltipOpts( triggeraxis, formatter国家{b}br人口{c} 人 ) ) .set_series_opts( label_optsopts.LabelOpts( positionright, formatter{c} 人, font_size11, color#ffffff ) ) ) timeline.add(bar, str(year))时间轴样式美化timeline.add_schema(is_auto_playTrue,play_interval600,is_loop_playTrue,# 时间轴文字label_optsopts.LabelOpts(color“#ffffff”, font_size11, font_weight“bold”),# 轴线样式linestyle_optsopts.LineStyleOpts(color“#00a1ff”, width4),# 节点圆点样式itemstyle_optsopts.ItemStyleOpts(color“#00a1ff”,border_color“#ffffff”,border_width2))导出最终成品HTMLtimeline.render(“B站风格_世界人口动态轮播图.html”)timeline.render_notebook()运行结果与效果展示运行代码后会在项目目录生成 3 个 HTML 文件1.单年份人口排名.html1990 年静态排名柱状图2基础人口轮播图.html简易版年份轮播图3.B站风格_世界人口动态轮播图.html最终美化版动态排名图打开 HTML 文件即可在浏览器中查看自动轮播、排名动态变化、悬浮查看人口的完整效果完美复刻 B 站常见的人口 / GDP 动态排序可视化视频效果。
【无标题】世界人口排序轮播图
数据分析项目报告B 站风格世界人口动态排序轮播图项目概述1.1 项目背景动态排序轮播图Bar Chart Race是数据可视化领域的经典形式尤其在 B 站等视频平台广受欢迎。本项目旨在通过 Python 数据分析与可视化技术完整复刻高质量的世界人口年度动态排序轮播图展示 1960 年至 2024 年间世界各国人口总数的历史变迁。1.2 项目目标数据纯净完整剔除大洲、收入组、地区汇总等非国家数据仅保留 195 个真实主权国家。动态展示图表自动按年份轮播每年严格按人口总数降序排列人口越多的国家越靠图表上方。全交互体验支持悬浮显示具体人口数值、暂停 / 播放控制、手动切换年份。商业级美化采用深色背景、动态配色、圆角数值标签及丝滑轮播节奏达到 B 站专业级可视化标准。技术栈与运行环境编程语言Python 3.x数据处理pandas用于数据读取、清洗、宽表转换数据可视化pyechartsBar 柱状图 Timeline 时间轮播组件前端配置JsCode用于实现动态颜色映射、CDN 镜像配置解决国内网络加载空白问题python运行1. 导入核心工具import pandas as pd # 数据处理库from pyecharts.charts import Bar, Timeline # 柱状图、时间轮播组件from pyecharts import options as opts # 配置项工具from pyecharts.globals import ThemeType, CurrentConfig # 内置主题、CDN配置from pyecharts.commons.utils import JsCode # 动态颜色JS工具修复CDN解决国内网络HTML空白问题国内运行必加CurrentConfig.ONLINE_HOST “https://cdn.jsdelivr.net/npm/echarts5.4.3/dist/”3. 数据获取与探查阶段 13.1 数据加载项目读取本地 CSV 文件 世界人口数据-中文版1960-2024.csv由于文件中包含中文字符读取时需指定编码为 gbk避免乱码问题。python运行2. 读取中文版人口数据集df pd.read_csv(‘./data/世界人口数据-中文版1960-2024.csv’, encoding‘gbk’)df.head()3.2 数据结构探查通过 df.info() 探查数据集的基础结构样本量266 行包含国家及各类汇总区域70 列特征量4 列属性Country Name 国家名称、Country Code 国家代码、Indicator Name 指标名称、Indicator Code 指标代码 66 列时间序列1960-2025 年的数值列其中 2025 年数据全为 NaN有效数据区间为 1960-2024 年python运行df.info()4. 数据清洗与预处理阶段 2原始数据为宽格式一行一个国家多年年份平铺为多列且包含大量非主权国家的汇总数据无法直接用于绘图。预处理分为以下核心步骤4.1 提取目标列通过列表推导式筛选出所有列名为纯数字的列作为年份列 year_cols保留 4 个属性列作为 attr_cols。python运行通过筛选式筛选出所有列名为纯数字的列作为年份列year_cols [i for i in df.columns if i.isdigit()]attr_cols [‘Country Name’, ‘Country Code’, ‘Indicator Name’, ‘Indicator Code’]4.2 剔除无效与汇总数据核心清洗删除空值直接删除 Country Name 为 NaN 的行此类行通常为 AFE/AFW 等大洲汇总。黑名单过滤定义包含 40 项的 black_list涵盖全球及大洲汇总如 “世界”、“东亚与太平洋地区”、收入等级分类如 “高收入国家”、非主权地区 / 领地如阿鲁巴、中国香港特别行政区等通过 ~df[“Country Name”].isin(black_list) 进行反向过滤最终精准保留 195 个真实主权国家。python运行定义黑名单剔除大洲、收入组、地区汇总、非主权地区等无效数据black_list [# 全球大洲汇总“世界”, “北美”, “东亚与太平洋地区”, “欧洲与中亚地区”,“东亚与太平洋地区(不包括高收入)”, “欧洲与中亚地区(不包括高收入)”,“拉丁美洲与加勒比海地区”, “拉丁美洲与加勒比海地区(不包括高收入)”,“中东、北非、阿富汗与巴基斯坦”, “中东与北非地区(不包括高收入)”,“撒哈拉以南非洲地区”, “撒哈拉以南非洲地区(不包括高收入)”,“南亚”, “小国”, “加勒比小国”, “太平洋岛国”, “其他小国”,“未分类国家”, “阿拉伯联盟国家”, “欧洲联盟”, “欧洲货币联盟”,# 收入等级分类“经合组织成员”, “重债穷国(HIPC)”, “脆弱和受衝突影響的情况下”,“高收入国家”, “低收入国家”, “中等收入国家”,“中高等收入国家”, “中低等收入国家”, “中低收入国家”,# 人口红利分类“早人口紅利”, “后期人口紅利”, “預人口紅利”, “人口紅利之後”,# 世界银行分组“最不发达国家:联合国分类”, “IBRD与IDA”, “只有IBRD”, “只有IDA”,“IDA總”, “IDA混合”, “东亚与太平洋地区(IBRD与IDA)”,“欧洲与中亚地区(IBRD与IDA)”, “拉丁美洲与加勒比海地区(IBRD与IDA)”,“中东与北非地区(IBRD与IDA)”, “南亚(IBRD与IDA)”,“撒哈拉以南非洲地区(IBRD与IDA)”,# 非主权地区/海外领地“阿鲁巴”, “美属萨摩亚”, “海峡群岛”, “法罗群岛”, “直布罗陀”,“格陵兰”, “关岛”, “中国香港特别行政区”, “中国澳门特别行政区”,“圣马丁(法属)”, “圣马丁(荷属)”, “北马里亚纳群岛”, “新喀里多尼亚”,“波多黎各”, “百慕大”, “库拉索”, “开曼群岛”, “约旦河西岸和加沙”,“法属波利尼西亚”, “特克斯科斯群岛”, “英維爾京群岛”,“美维京群岛”, “科索沃”]过滤黑名单数据仅保留主权国家df df[~df[“Country Name”].isin(black_list)].reset_index(dropTrue)print(“过滤后剩余国家数量:”, df[“Country Name”].nunique())4.3 宽表转长表Reshape使用 pd.melt() 函数将数据转换为适合时序分析的长格式id_vars保持不变的属性列国家、编码等value_vars需要展开的年份列生成新列Year年份和 Population人口数值python运行melt 宽转长df_long pd.melt(df,id_varsattr_cols,value_varsyear_cols,var_name“Year”,value_name“Population”)df_long.head()4.4 数据类型转换与最终清理将 Year 列转换为 int 类型将 Population 列转换为 numeric 类型并使用 dropna() 删除转换后产生的空值如 2025 年的 NaN 数据最终得到包含 12675 条有效记录的干净数据集仅保留 Country Name, Year, Population 三列python运行最终数据整理、类型转换、去空值消除警告写法df_clean df_long[[“Country Name”, “Year”, “Population”]].copy()df_clean.loc[:, “Year”] df_clean[“Year”].astype(int)df_clean.loc[:, “Population”] pd.to_numeric(df_clean[“Population”])df_clean df_clean.dropna()df_clean.head()5. 数据可视化与迭代优化阶段 4-65.1 单年份横向柱状图测试阶段 4以 1990 年为例进行原型测试筛选 1990 年数据按人口降序排列并取前 20 名使用 pyecharts.Bar 绘制启用 reverse_axis() 将柱状图横向放置配置深色主题 ThemeType.DARK确保标签显示在柱子右侧position“right”验证基础渲染逻辑无误。python运行4. 单年份1990年柱状图测试test_df df_clean[df_clean[“Year”] 1990]按人口降序取前20名test_df test_df.sort_values(by“Population”, ascendingFalse).head(20)bar_test (Bar(init_optsopts.InitOpts(themeThemeType.DARK)).add_xaxis(test_df[“Country Name”].tolist()).add_yaxis(“人口”, test_df[“Population”].tolist()).reversal_axis().set_global_opts(title_optsopts.TitleOpts(title“1990年世界人口排名”, pos_left“center”),legend_optsopts.LegendOpts(is_showFalse)).set_series_opts(label_optsopts.LabelOpts(position“right”)))渲染为HTML文件 / Notebook预览bar_test.render(“bar_test.html”)bar_test.render_notebook()5.2 Timeline 轮播基础版阶段 5遍历清洗后的所有唯一 Year每年动态生成一个 Bar 实例并通过 Timeline.add() 方法将其按年份追加到时间轴中配置基础轮播参数is_auto_playTrue, play_interval600毫秒, is_loop_playTrue导出为 人口轮播_中文_基础版.html验证时序动画连续性。python运行5. 基础版 年份轮播图year_list df_clean[“Year”].unique().tolist()初始化时间线timeline Timeline(init_optsopts.InitOpts(width“1500px”,height“820px”,themeThemeType.DARK))遍历每一个年份生成柱状图并加入时间线for year in year_list:data_df df_clean[df_clean[“Year”] year]# 先降序取前20再升序配合反转轴实现从上到下人口递减data_df data_df.sort_values(by“Population”, ascendingFalse).head(20)data_df data_df.sort_values(by“Population”, ascendingTrue)country data_df[Country Name].tolist() population data_df[Population].tolist() bar ( Bar(init_optsopts.InitOpts(themeThemeType.DARK)) .add_xaxis(country) .add_yaxis(人口, population) .reversal_axis() .set_global_opts( title_optsopts.TitleOpts(titlef{year}年世界人口排名, pos_leftcenter), legend_optsopts.LegendOpts(is_showFalse) ) .set_series_opts( label_optsopts.LabelOpts(positionright) ) ) timeline.add(bar, str(year))配置轮播规则自动播放、间隔600ms、循环播放timeline.add_schema(is_auto_playTrue,play_interval600,is_loop_playTrue)导出文件timeline.render(“基础轮播图.html”)timeline.render_notebook()5.3 B 站风格深度美化完整版阶段 6为达到商业级可视化标准对基础版进行了全方位升级1.画布与背景优化尺寸调整为 1600px * 850px背景色设为极深灰 #080808提升沉浸感。2动态配色系统引入 JsCode定义包含 8 种高饱和度颜色的数组通过 params.dataindex % colorArr.length 算法使不同排名的国家柱子呈现动态循环色彩视觉冲击力更强。3.排序逻辑精调先按人口降序取前 20 名再按人口升序排列ascendingTrue原理配合 reverse_axis()升序列表的最后一项人口最多在反转 Y 轴后会精准显示在图表的最上方符合人类阅读习惯。4.图表细节打磨柱子样式设置 opacity0.85 增加质感border_radius7 实现圆角效果标签样式字体设为白色字号 11格式化显示为 “{c} 人”提示框tooltip定制 HTML 模板悬浮时清晰展示国家与数值。5.时间轴Timeline专属美化进度条颜色设为亮蓝色 #00a1ff线宽加粗至 4当前激活年份的节点设为带白色边框的蓝色圆点字体加粗提升交互反馈的清晰度播放间隔微调至 600ms节奏更丝滑。python运行6. B站风格 深度美化版 动态人口轮播图初始化时间线 深色背景画布timeline Timeline(init_optsopts.InitOpts(width“1600px”,height“850px”,themeThemeType.DARK,bg_color“#080808”))定义JS动态配色方案柱子循环变色color_js JsCode(“”function (params){let c [‘#ff4757’,‘#ffa502’,‘#fffa65’,‘#2ed573’,‘#1e90ff’,‘#3742fa’,‘#a55eea’];return c[params.dataIndex % c.length];}“”)获取所有年份year_list df_clean[“Year”].unique().tolist()循环生成每年图表for year in year_list:data_df df_clean[df_clean[“Year”] year]data_df data_df.sort_values(by“Population”, ascendingFalse).head(20)data_df data_df.sort_values(by“Population”, ascendingTrue)country data_df[Country Name].tolist() population data_df[Population].tolist() bar ( Bar(init_optsopts.InitOpts(themeThemeType.DARK)) .add_xaxis(country) .add_yaxis( series_name人口, y_axispopulation, itemstyle_optsopts.ItemStyleOpts( colorcolor_js, opacity0.85, border_radius7 ) ) .reversal_axis() .set_global_opts( title_optsopts.TitleOpts( titlef{year}年世界人口排名, pos_leftcenter, textstyle_optsopts.TextStyleOpts(color#ffffff, font_size20) ), legend_optsopts.LegendOpts(is_showFalse), # 悬浮提示框 tooltip_optsopts.TooltipOpts( triggeraxis, formatter国家{b}br人口{c} 人 ) ) .set_series_opts( label_optsopts.LabelOpts( positionright, formatter{c} 人, font_size11, color#ffffff ) ) ) timeline.add(bar, str(year))时间轴样式美化timeline.add_schema(is_auto_playTrue,play_interval600,is_loop_playTrue,# 时间轴文字label_optsopts.LabelOpts(color“#ffffff”, font_size11, font_weight“bold”),# 轴线样式linestyle_optsopts.LineStyleOpts(color“#00a1ff”, width4),# 节点圆点样式itemstyle_optsopts.ItemStyleOpts(color“#00a1ff”,border_color“#ffffff”,border_width2))导出最终成品HTMLtimeline.render(“B站风格_世界人口动态轮播图.html”)timeline.render_notebook()运行结果与效果展示运行代码后会在项目目录生成 3 个 HTML 文件1.单年份人口排名.html1990 年静态排名柱状图2基础人口轮播图.html简易版年份轮播图3.B站风格_世界人口动态轮播图.html最终美化版动态排名图打开 HTML 文件即可在浏览器中查看自动轮播、排名动态变化、悬浮查看人口的完整效果完美复刻 B 站常见的人口 / GDP 动态排序可视化视频效果。