前言
大国点名,没你不行。
官方已经公布了第七次人口普查的数据, 有了这些数据我们可做哪些展示呢, 本节将介绍几种常用的方法.

工具准备
使用python中的pyechart工具包, 下载及安装方法: pyechart官网

在这里插入图片描述

1 各地区人口数

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")

在这里插入图片描述

2 历次人口普查年均增长率

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')

在这里插入图片描述

柱形图和曲线图组合, 隐藏坐标轴

3 各地区人口占比

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")

在这里插入图片描述

4 男女比、年龄比、地区人口比、城乡人口比

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参数设置数据标签不同显示方式


如果对你帮助, 欢迎点赞、关注!

相关阅读:

1. python小白, 1周入门python数据分析视频课程

2. pyechart可视化18式丨从柱形图的变化, 搞懂pyechart作图套路

3. 懂点excel作图, 怎么让pyechart作的图更具“职场范“呢?

4. 8个常用的python办公室自动化技巧,学会了同事都找你!

5. 学习python数据分析的30个练手数据+4个数据集网站

6. [工作必备]pandas数据分析处理52个常用技巧

7. 泰坦尼克号数据你没见过的可视化丨pyechart制作桑基图(sankey)的最简单方法