目录
作业要求
一、江西省各地市(年末)常住人口分布地图绘制
1.1 代码实现
1.1.1采用Map实现
1.1.2 采用Geo实现
1.2 绘制结果
二、江西省各地市常住人口分布饼状图绘制
2.1代码实现
2.2 绘制结果
三、江西省各地市常住人口城镇化率柱状图绘制
3.1 代码实现
3.2 绘制结果
四、江西省各地市性别比柱状图绘制(降序排列)
4.1 代码实现
4.2 绘制结果
END
作业要求
读取实验课2江西人口普查数据,使用pyecharts 绘制以下图形,提交代码,可视化结果。
- 绘制江西省各地市常住人口分布地图(各地市颜色显示);
- 绘制江西省各地市常住人口分布饼状图;
- 绘制江西省各地市常住人口城镇化率柱状图;
- 绘制江西省各地市性别比柱状图(降序排列)。
数据集展示:
地 区 | 年末常住人口(万人) | 总人口性别比(女性=100) | 常住人口城镇化率(%) |
江西省 | 4517.4 | 107.01 | 61.46 |
南昌市 | 643.75 | 109.98 | 78.64 |
景德镇市 | 162.06 | 107.77 | 65.94 |
萍乡市 | 180.59 | 103.8 | 68.77 |
九江市 | 456.07 | 105.56 | 62.15 |
新余市 | 120.21 | 109.45 | 74.14 |
鹰潭市 | 115.5 | 107.73 | 65.43 |
赣州市 | 898 | 106.02 | 56.35 |
吉安市 | 442.51 | 106.73 | 53.41 |
宜春市 | 497.11 | 107.04 | 57.38 |
抚州市 | 357.94 | 107.22 | 57.96 |
上饶市 | 643.67 | 106.71 | 55.31 |
一、江西省各地市(年末)常住人口分布地图绘制
1.1 代码实现
1.1.1采用Map实现
import pandas as pd
from pyecharts.charts import Map
from pyecharts import options as opts
# 读取Excel文件
df = pd.read_excel("江西省人口普查.xlsx")
# 获取地市名称和年末常住人口数据
province_data = [(city, population) for city, population in zip(df['地区'], df['年末常住人口(万人)'])]
# 创建地图
map_chart = Map()
# 添加地图数据
map_chart.add("年末常住人口", province_data, "江西")
# 设置全局配置项
map_chart.set_global_opts(
title_opts=opts.TitleOpts(title="江西省各地市常住人口分布地图"), # 标题配置
visualmap_opts=opts.VisualMapOpts(max_=max(df['年末常住人口(万人)'].astype(float)), is_piecewise=True), # 根据数据的最大值设置视觉映射
)
map_chart.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}万人")) # 数据标签格式化
# 生成图表
map_chart.render("江西人口分布.html") # 保存为HTML文件
1.1.2 采用Geo实现
import pandas as pd
from pyecharts.charts import Geo
from pyecharts import options as opts
# 读取Excel文件
df = pd.read_excel("江西省人口普查.xlsx")
# 获取地市名称和年末常住人口数据
province_data = [(city, population) for city, population in zip(df['地 区'], df['年末常住人口(万人)'])]
# 创建地理图
geo_chart = Geo()
# 添加地图数据
geo_chart.add_schema(maptype="江西")
# 设置全局配置项
geo_chart.set_global_opts(
title_opts=opts.TitleOpts(title="江西省各地市常住人口分布地图"),
visualmap_opts=opts.VisualMapOpts(max_=max(df['年末常住人口(万人)'].astype(float)), is_piecewise=True),
)
# 设置系列配置项,包括数据标签格式化
geo_chart.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}万人"))
# 添加数据
geo_chart.add("年末常住人口", province_data)
# 生成图表并保存为HTML文件
geo_chart.render("江西人口分布geo.html")
1.2 绘制结果
注:绘制结果本次作业均保存为html文件,根据人口的数量进行了颜色的划分显示,在Safari浏览器打开后的结果如下:
(1)采用Map进行绘制
(2)采用Geo进行绘制
二、江西省各地市常住人口分布饼状图绘制
2.1代码实现
import pandas as pd
from pyecharts.charts import Pie
from pyecharts import options as opts
# 读取Excel文件
df = pd.read_excel("江西省人口普查.xlsx")
# 排除江西省总体数据,只保留各地市数据
city_population = df.iloc[1:, [0, 1]].values.tolist() # 从第二行开始(排除标题行),提取地区名称和年末常住人口数据
# 创建饼状图
pie_chart = Pie()
# 添加数据
pie_chart.add(
"年末常住人口",
city_population,
# 设置内径为0,避免出现环状图
radius=["0", "75%"]
)
# 设置全局参数
pie_chart.set_global_opts(
# 标题设置
title_opts=opts.TitleOpts(title="江西省各地市常住人口分布饼状图"),
# 图例设置
tooltip_opts=opts.TooltipOpts(formatter="{a} <br/>{b}: {c}万人") # 鼠标悬停提示框设置
)
# 显示数据标签
pie_chart.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}万人"))
# 生成图表
pie_chart.render("江西人口分布饼状图.html") # 保存为HTML文件
2.2 绘制结果
注:鼠标悬停在html文件对应位置上可更直观显示标签等信息,可以很好的提高可视化效果。
最终可视化结果:采用了多种颜色来区分各个地区,更加美观整洁
三、江西省各地市常住人口城镇化率柱状图绘制
3.1 代码实现
import pandas as pd
from pyecharts.charts import Bar
from pyecharts import options as opts
# 读取Excel文件
df = pd.read_excel("江西省人口普查.xlsx")
# 从DataFrame中提取地区名称和城镇化率数据
regions = df['地区'].tolist()
urbanization_rates = df['常住人口城镇化率(%)'].tolist()
# 确保数据顺序一致
if regions[0] != '江西省':
regions, urbanization_rates = urbanization_rates, regions
# 创建柱状图
bar_chart = Bar()
# 向柱状图添加数据
bar_chart.add_xaxis(regions)
bar_chart.add_yaxis("城镇化率(%)", urbanization_rates)
# 设置全局配置项
bar_chart.set_global_opts(
# 标题设置
title_opts=opts.TitleOpts(title="江西省各地市常住人口城镇化率柱状图"),
# 图例设置
legend_opts=opts.LegendOpts(orient="horizontal", pos_top="top"),
tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"),
# 提示框设置
brush_opts=opts.BrushOpts(), # 开启刷选功能
# 视觉映射配置,根据数据不同显示不同颜色
visualmap_opts=opts.VisualMapOpts(max_=100, is_piecewise=True, pieces=[
{"min": 0, "max": 50, "label": "0-50%", "color": "#FFD700"},
{"min": 50, "max": 75, "label": "50-75%", "color": "#FFA07A"},
{"min": 75, "max": 100, "label": "75-100%", "color": "#CD5C5C"}
])
)
# 设置标签位置
bar_chart.set_series_opts(label_opts=opts.LabelOpts(position="right")) # 标签靠右显示
# 生成图表
bar_chart.render("城镇化率柱状图.html") # 保存为HTML文件
3.2 绘制结果
注:对于该柱状图的绘制,我查阅了一些资料以求得到的图形更加美观。包括如下调整:
·legend_opts: 将图例设置为水平方向,并放置在图表顶部。
·tooltip_opts: 配置了提示框,使其在触发时显示交叉轴的指示器。
·grid_opts: 设置了网格的位置,使得图表的顶部和底部有一定的空间。
·visualmap_opts: 配置了视觉映射,根据城镇化率的不同范围显示不同的颜色,使得数据的比较更加直观。
鼠标悬停效果展示:
四、江西省各地市性别比柱状图绘制(降序排列)
4.1 代码实现
import pandas as pd
from pyecharts.charts import Bar
from pyecharts import options as opts
# 读取Excel文件
df = pd.read_excel("江西省人口普查.xlsx")
# 从DataFrame中提取地区名称和性别比数据
regions = df['地区'].tolist()
gender_ratios = df['总人口性别比(女性=100)'].tolist()
# 将地区和性别比数据组合成元组,并按照性别比进行降序排序,此处采用lambda函数
sorted_data = sorted(zip(regions, gender_ratios), key=lambda x: x[1], reverse=True)
# 提取排序后的地区名称和性别比数据
sorted_regions, sorted_gender_ratios = zip(*sorted_data)
# 创建柱状图
bar_chart = Bar()
# 添加数据
bar_chart.add_xaxis(sorted_regions)
bar_chart.add_yaxis("性别比", sorted_gender_ratios)
# 进行参数设置
bar_chart.set_global_opts(
# 标题设置
title_opts=opts.TitleOpts(title="江西省各地市性别比柱状图"),
yaxis_opts=opts.AxisOpts(name="总人口性别比"), # 设置Y轴名称
xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=45)), # X轴标签旋转45度,更加美观
)
# 生成图表
bar_chart.render("jx_gender_ratio_bar_chart.html") # 保存为HTML文件
4.2 绘制结果
注:柱状图按照地区性别比实现了降序排列
END