前言
大国点名,没你不行。
官方已经公布了第七次人口普查的数据, 有了这些数据我们可做哪些展示呢, 本节将介绍几种常用的方法.
工具准备
使用python中的pyechart工具包, 下载及安装方法: pyechart官网
1.1 导入工具包
import pandas as pd
import numpy as np
from pyecharts import options as opts
from pyecharts.charts import Map, Bar,Line,Pie
调用pyechart中的中国地图, 柱形图, 线形图, 饼图
2.2 读取数据
data = pd.read_excel('C:/Users/yyz/Desktop/pyechart数据可视化/data/第七次人口普查.xlsx',sheet_name=None)
data1 = data['各地区人口占比']
data1
数据都存放在一个工作簿中, 批量读取设置sheet_name=None
广东、山东人口过亿
1.3 可视化展示
c1 = (
Map(init_opts=opts.InitOpts(width="1400px", height="700px",theme='purple-passion')) #westeros
.add("省份", # 系列名称
[list(z) for z in zip(data1['地区'], data1['数量'])], # 数据
"china", # 地图
is_map_symbol_show=False, # 不显示小红点
)
.set_global_opts(
title_opts=opts.TitleOpts(title="第七次人口普查各地区人口数", # 图表标题
title_textstyle_opts=opts.TextStyleOpts(font_size=20), #字体大小
pos_left='center', # 标题位置
pos_top='5%'),
tooltip_opts=opts.TooltipOpts(is_show=True),
legend_opts=opts.LegendOpts(is_show=False), # 图例是否显示
visualmap_opts=opts.VisualMapOpts(max_=15000, # 最大值
is_piecewise=True, # 是否为分段型
range_text=['万人',''], # 上下显示的文字
pos_left='20%',
pos_top='60%',
pieces=[{
"min": 200,"max":1000},
{
"min": 1000,"max":2000},
{
"min": 2000,"max":4000},
{
"min": 4000,"max":6000},
{
"min": 6000,"max":8000},
{
"min": 8000,"max":10000},
{
"min": 10000}]
),
))
c1.render("./01_各地区人口数.html")
data2 = data['历次人口普查年均增长率']
data2
bar = (
Bar(init_opts=opts.InitOpts(width="1200px", height="500px",theme='westeros')) # 设置图表大小
.add_xaxis(data2['年份'].tolist()) # 设置柱形图的x轴, 必须写.tolist()
.add_yaxis(
series_name="人口数(亿)", # y轴系列名称
y_axis=data2['人口数'].tolist(), # 系列数据
label_opts=opts.LabelOpts(is_show=True,position='top',formatter="{c}"),# 数字标签显示样式
)
.extend_axis( # 设置次坐标轴
yaxis=opts.AxisOpts(
name="",
type_="value",
min_=-5, # 最小值
max_=3, # 最大值
is_show=False, # 是否显示
)
)
.set_global_opts(
title_opts=opts.TitleOpts(title="历次人口普查年均增长率", # 主标题
subtitle="", #副标题
pos_top='5%',
title_textstyle_opts=opts.TextStyleOpts(font_size=20),
pos_left='center'), # 位置
tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"), # 鼠标交叉十字显示
legend_opts=opts.LegendOpts(is_show=False,pos_top="center"), # 图例
yaxis_opts=opts.AxisOpts( # 显示y轴网格线
is_show=False,
max_=25,
type_="value",
axistick_opts=opts.AxisTickOpts(is_show=False), # 坐标轴商的刻度是否显示
axisline_opts=opts.AxisLineOpts(is_show=False), # y轴线
splitline_opts=opts.SplitLineOpts(is_show=True), # y轴网格线是否显示
))
)
line = (
Line(init_opts=opts.InitOpts(width="1200px", height="500px")) # 设置图表大小
.add_xaxis(data2['年份'].tolist()) # 设置线形图的x轴
.add_yaxis("",
data2['增长率(%)'], # 系列数据
symbol_size=10, # 标识的大小
is_smooth=True,
yaxis_index=1, # 主坐标轴还是次坐标轴
label_opts=opts.LabelOpts(is_show=True,position='bottom',formatter="{c}%",color ='#28527a'), # 数据标签
linestyle_opts=opts.LineStyleOpts(width=3,color ='#28527a'), # 线宽度
itemstyle_opts=opts.ItemStyleOpts(border_width=3, border_color='#28527a', color='#28527a'), # 标识的颜色和宽度
) #标记重点
)
bar.overlap(line) # 图表组合
bar.render('./03_历次人口普查年均增长率.html')
柱形图和曲线图组合, 隐藏坐标轴
c2 = (
Pie(init_opts=opts.InitOpts(width="1200px", height="800px",theme='westeros'))
.add(
"",
[list(z) for z in zip(data1['地区'], data1['人口占比'])],
radius=["20%", "75%"],
center=["50%", "50%"],
rosetype="radius",
label_opts=opts.LabelOpts(is_show=True),
)
.set_global_opts(title_opts=opts.TitleOpts(title="第七次人口普查各地区人口占比",
pos_left='center'),
legend_opts=opts.LegendOpts(is_show=False))
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
)
c2.render("./02_各地区人口占比.html")
c3 = (
Pie(init_opts=opts.InitOpts(theme='westeros'))
.add(
"性别比例",
[list(z) for z in zip(["男", "女"], [51.24, 48.76])],
center=["30%", "30%"],
radius=[50, 80],
label_opts=opts.LabelOpts(formatter="{b}: {c}%")
)
.add(
"年龄结构",
[list(z) for z in zip(["0-14岁", "15-59岁","60岁以上"], [25338,89438,26402])],
center=["70%", "30%"],
radius=[50, 80],
label_opts=opts.LabelOpts(
position="outside",
formatter="{b}: {c} \n\n 百分比: {d}% "))
.add(
"地区分布",
[list(z) for z in zip(["东部地区", "中部地区","东北地区","西部地区"], [39.93, 25.83,6.98,27.12])],
center=["30%", "70%"],
radius=[50, 80],
label_opts=opts.LabelOpts(formatter="{b}: {c}%")
)
.add(
"城乡人口",
[list(z) for z in zip(["乡村人口", "城镇人口"], [50979, 90199])],
center=["70%", "70%"],
radius=[50, 80],
label_opts=opts.LabelOpts(
position="outside",
formatter="{b}: {c} \n\n 百分比: {d}% ")
)
.set_global_opts(
title_opts=opts.TitleOpts(title=""),
legend_opts=opts.LegendOpts(is_show=False))
)
c3.render("./04_其他数据.html")
通过formatter参数设置数据标签不同显示方式
如果对你帮助, 欢迎点赞、关注!
相关阅读:
pyechart可视化18式丨从柱形图的变化, 搞懂pyechart作图套路
懂点excel作图, 怎么让pyechart作的图更具“职场范“呢?
8个常用的python办公室自动化技巧,学会了同事都找你!
学习python数据分析的30个练手数据+4个数据集网站
[工作必备]pandas数据分析处理52个常用技巧
泰坦尼克号数据你没见过的可视化丨pyechart制作桑基图(sankey)的最简单方法