python 打印人口分布金字塔图

背景

今天介绍一个不使用 matplot,通过DebugInfo模块打印人口金字塔图的方法。

引入模块

pip install DebugInfo

打印人口金字塔图

下面的代码构建了两个人口数据(仅做功能演示,不承诺任何参考价值),男性人口和女性人口,然后将其分别整理成条形图,对齐后呈现为金字塔图形式,代码如下:

# -*- coding:UTF-8 -*-

# region 引入调试模块
import random
from DebugInfo.DebugInfo import *

# endregion

白板 = 调试模板()
白板.准备表格(对齐控制串='lrr')  # 第一列 左对齐, 第二列 右对齐, 第三列 右对齐, 其它未设置列默认 左对齐
白板.表格列间距 = [2, 2, 0]  # 第一个列间距为2, 第二个列间距为 2, 第三个列间距为 0, 其它未设置列间距默认为 2

# 假如你已经整理完成了数据,这里是样例数据
人口数量男 = {'0-4': random.randrange(400, 450),
            '5-9': random.randrange(350, 400),
            '10-14': random.randrange(320, 350),
            '15-19': random.randrange(310, 320),
            '20-24': random.randrange(300, 310),
            '25-29': random.randrange(300, 305),
            '30-34': random.randrange(290, 310),
            '35-39': random.randrange(280, 300),
            '40-44': random.randrange(270, 290),
            '45-49': random.randrange(250, 270),
            '50-54': random.randrange(230, 240),
            '55-59': random.randrange(200, 220),
            '60-64': random.randrange(170, 190),
            '65-69': random.randrange(130, 150),
            '70-74': random.randrange(100, 120),
            '75-79': random.randrange(75, 90),
            '80-84': random.randrange(45, 70),
            '85-89': random.randrange(30, 50),
            '90-94': random.randrange(20, 30),
            '95-99': random.randrange(25, 28),
            '100+': random.randrange(5, 15)}

人口数量女 = {'0-4': random.randrange(350, 380),
            '5-9': random.randrange(330, 350),
            '10-14': random.randrange(300, 330),
            '15-19': random.randrange(290, 300),
            '20-24': random.randrange(290, 300),
            '25-29': random.randrange(280, 290),
            '30-34': random.randrange(275, 280),
            '35-39': random.randrange(270, 275),
            '40-44': random.randrange(270, 290),
            '45-49': random.randrange(250, 270),
            '50-54': random.randrange(230, 250),
            '55-59': random.randrange(200, 230),
            '60-64': random.randrange(180, 200),
            '65-69': random.randrange(150, 160),
            '70-74': random.randrange(140, 150),
            '75-79': random.randrange(120, 130),
            '80-84': random.randrange(70, 80),
            '85-89': random.randrange(50, 70),
            '90-94': random.randrange(40, 50),
            '95-99': random.randrange(35, 40),
            '100+': random.randrange(25, 30)}

# 第一行作为标题
白板.添加一行('年龄', '数量/百万', '{}'.format(蓝字('人口男')), '{}'.format(洋红字('人口女')), '数量/百万', '备注').修饰行(青字)

人口数量最大值 = max(max(人口数量男.values()), max(人口数量女.values()))

# 把业务数据依次添加到表格中
for 年龄段 in 人口数量男.keys():
    男生数量 = int(人口数量男[年龄段] * 50 / 人口数量最大值)
    女生数量 = int(人口数量女[年龄段] * 50 / 人口数量最大值)

    白板.添加一行(年龄段, 男生数量, '{}'.format(蓝字('▉' * 男生数量)), '{}'.format(洋红字('▉' * 女生数量)), 女生数量)

# 展示你的表格
白板.分隔线.总长度(白板.表格宽度()).提示内容('人口金字塔分布图效果演示, 数量对齐').修饰方法(红字).展示()
白板.上下颠倒表格().展示表格()

以上代码运行效果如下:
DebugInfo 模块打印人口金字塔图效果 人口数量两边对齐显示

人口数量跟随条形图

以上代码中,我们如果将人口数据分别符在男性人口和女性人口条形图的前后,可将人口跟随条形图显示,代码如下:

# -*- coding:UTF-8 -*-

# region 引入调试模块
import random
from DebugInfo.DebugInfo import *

# endregion

白板 = 调试模板()
白板.准备表格(对齐控制串='lr')  # 第一列 左对齐,第二列 右对齐, 其它列默认左对齐
白板.表格列间距 = [2, 0]  # 第一个列间距为 2, 第二个列间距为 0, 其它列间距默认为 2

# 假如你已经整理完成了数据,这里是样例数据
人口数量男 = {'0-4': random.randrange(400, 450),
            '5-9': random.randrange(350, 400),
            '10-14': random.randrange(320, 350),
            '15-19': random.randrange(310, 320),
            '20-24': random.randrange(300, 310),
            '25-29': random.randrange(300, 305),
            '30-34': random.randrange(290, 310),
            '35-39': random.randrange(280, 300),
            '40-44': random.randrange(270, 290),
            '45-49': random.randrange(250, 270),
            '50-54': random.randrange(230, 240),
            '55-59': random.randrange(200, 220),
            '60-64': random.randrange(170, 190),
            '65-69': random.randrange(130, 150),
            '70-74': random.randrange(100, 120),
            '75-79': random.randrange(75, 90),
            '80-84': random.randrange(45, 70),
            '85-89': random.randrange(30, 50),
            '90-94': random.randrange(20, 30),
            '95-99': random.randrange(25, 28),
            '100+': random.randrange(5, 15)}

人口数量女 = {'0-4': random.randrange(350, 380),
            '5-9': random.randrange(330, 350),
            '10-14': random.randrange(300, 330),
            '15-19': random.randrange(290, 300),
            '20-24': random.randrange(290, 300),
            '25-29': random.randrange(280, 290),
            '30-34': random.randrange(275, 280),
            '35-39': random.randrange(270, 275),
            '40-44': random.randrange(270, 290),
            '45-49': random.randrange(250, 270),
            '50-54': random.randrange(230, 250),
            '55-59': random.randrange(200, 230),
            '60-64': random.randrange(180, 200),
            '65-69': random.randrange(150, 160),
            '70-74': random.randrange(140, 150),
            '75-79': random.randrange(120, 130),
            '80-84': random.randrange(70, 80),
            '85-89': random.randrange(50, 70),
            '90-94': random.randrange(40, 50),
            '95-99': random.randrange(35, 40),
            '100+': random.randrange(25, 30)}

# 第一行作为标题
白板.添加一行('年龄', '{}'.format(蓝字('人口男/百万')), '{}'.format(洋红字('人口女/百万')), '备注').修饰行(青字)

人口数量最大值 = max(max(人口数量男.values()), max(人口数量女.values()))

# 把业务数据依次添加到表格中
for 年龄段 in 人口数量男.keys():
    男生数量 = int(人口数量男[年龄段] * 50 / 人口数量最大值)
    女生数量 = int(人口数量女[年龄段] * 50 / 人口数量最大值)

    白板.添加一行(年龄段, '{} {}'.format(男生数量, 蓝字('▉' * 男生数量)), '{} {}'.format(洋红字('▉' * 女生数量), 女生数量))

# 展示你的表格
白板.分隔线.总长度(白板.表格宽度()).提示内容('人口金字塔分布图效果演示, 数量跟随').修饰方法(红字).展示()
白板.上下颠倒表格().展示表格()

以上代码将人口数据与人口条形图组合在一起打印输出,效果如下:
DebugInfo 模块打印人口金字塔图效果 人口数量跟随条形图显示

小结

以上就是今天分享的使用DebugInfo模块输出人口金字塔图的使用方法了,希望可以帮到大家。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/84914.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

FirmAE 工具安装(解决克隆失败 网络问题解决)

FirmAE官方推荐使用Ubuntu 18.04系统进行安装部署,FirmAE工具的安装部署十分简单,只需要拉取工具仓库后执行安装脚本即可。 首先运行git clone --recursive https://kgithub.com/pr0v3rbs/FirmAE命令 拉取FirmAE工具仓库,因为网络的问题&…

交叉熵--损失函数

目录 交叉熵(Cross Entropy) 【预备知识】 【信息量】 【信息熵】 【相对熵】 【交叉熵】 交叉熵(Cross Entropy) 是Shannon信息论中一个重要概念, 主要用于度量两个概率分布间的差异性信息。 语言模型的性能…

Java之继承详解二

3.7 方法重写 3.7.1 概念 方法重写 :子类中出现与父类一模一样的方法时(返回值类型,方法名和参数列表都相同),会出现覆盖效果,也称为重写或者复写。声明不变,重新实现。 3.7.2 使用场景与案例…

【Gitee提交pr】

Gitee提交pr 什么是pr怎样提交一个pr嘞? 什么是pr pr:指的是将自己的修改从自己的账号仓库dev下提交到官方账号仓库master下; 通俗来讲就是Gitee线上有属于自己的分支,然后本地在自己地分支修改完代码之后,提交到自己的线上分支&a…

Docker容器无法启动 Cannot find /usr/local/tomcat/bin/setclasspath.sh

报错信息如下 解决办法 权限不够 加上--privileged 获取最大权限 docker run --privileged --name lenglianerqi -p 9266:8080 -v /opt/docker/lenglianerqi/webapps:/usr/local/tomcat/webapps/ -v /opt/docker/lenglianerqi/webapps/userfile:/usr/local/tomcat/webapps/u…

[JavaWeb]【五】web后端开发-Tomcat SpringBoot解析

目录 一 介绍Tomcat 二 基本使用 2.1 解压绿色版 2.2 启动TOMCAT 2.3 关闭TOMCAT 2.4 常见问题 2.5 修改端口号 2.6 部署应用程序 三 SpringBootWeb入门程序解析 前言:tomcat与SpringBoot解析 一 介绍Tomcat 二 基本使用 2.1 解压绿色版 2.2 启动TOMCAT 2…

万字长文带你快速了解整个Flutter开发流程

文章目录 背景1.简介与优势Flutter是什么?为什么选Flutter? 2.开发环境搭建安装Flutter SDK配置开发环境 3.创建项目项目结构概览: 4.UI 构建与布局什么是Widget:StatelessWidget和StatefulWidget:Widget的组合&#x…

《树莓派4B家庭服务器搭建指南》第二十期:在树莓派运行rsnapshot, 实现对服务器数据低成本增量本地备份

title: 020《树莓派4B家庭服务器搭建指南》第二十期:在树莓派运行rsnapshot, 实现对服务器数据低成本增量本地备份 我的天翼云服务器有/opt 和 /usr/share/nginx两个目录, 用来存储网站的内容, 数据无价, 为了避免珍贵的数据丢失,我决定使用树莓派运行 …

数据结构算法--4堆排序

堆排序过程: >建立堆(大根堆) >得到堆顶元素,为最大元素 >去掉堆顶,将堆最后一个元素放到堆顶,此时可通过一次调整使堆重新有序 >堆顶元素为第二大元素 >重复步骤3,直到堆变空 此时是建立堆后的大根堆模型 将…

凯迪正大—直流电阻测试仪

一、产品概述 武汉凯迪正大直流电阻测量仪是变压器制造中半成品、成品出厂试验、安装、交接试验及电力部门预防性试验的必测项目,能有效发现变压器线圈的选材、焊接、连接部位松动、缺股、断线等制造缺陷和运行后存在的隐患。 为了满足变压器直流电阻测量的需要&a…

企业网三层构架实验

实验题目如下: 实验拓扑如下: 实验要求如下: 【1】内网IP地址172.16.0.0/16 合理分配 【2】SW1/2之间互为备份 【3】VRBP/STP/VLAN/TRUNK均使用 【4】所有PC通过DHCP获取IP地址 实验思路如下: (1)合理…

基于X86六轮差速移动机器人运动控制器设计与实现(一)软件与硬件架构

本文研究的六轮差速移动机器人 (Six-Wheeled Differential Mobile Robot , SWDMR) 为了满足资源站到资源站点对点的物资运输,对机器人的跨越障碍能力 有较高的要求。对比传统的四轮移动机器人,六轮移动机器人能够提供更强的驱动 力&#…

pytest自动化框架运行全局配置文件pytest.ini

还记得在之前的篇章中有讲到Pytest是目前主要流行的自动化框架之一,他有基础的脚本编码规则以及两种运行方式。 pytest的基础编码规则是可以进行修改,这就是今日文章重点。 看到这大家心中是否提出了两个问题:pytest的基础编码规则在哪可以…

认识docker+LNMP架构

目录 一、docker 1.安装,启动 2.docker相关命令 3.如何使用? 二、LNMP 1.认识LNMP 2.sql注入漏洞挖掘 3.如何绕过检测进行注入 一、docker 1.安装,启动 2.docker相关命令 docker search nginx 搜索镜像 docker pull docker.io/ngin…

皮爷咖啡基于亚马逊云科技的数据架构,加速数据治理进程

皮爷咖啡(Peet’s Coffee)是美国精品咖啡品牌,于2017年进入中国,为中国消费者带来传统经典咖啡饮品,并特别呈现更加丰富的品质咖啡饮品体验。通过深入应用亚马逊云科技云原生数据库产品Amazon Redshift以及Amazon DMS等…

AI智能语音机器人的基本业务流程

先画个图,了解下AI语音机器人的基本业务流程。 上图是一个AI语音机器人的业务流程,简单来说就是首先要配置话术,就是告诉机器人在遇到问题该怎么回答,这个不同公司不同行业的差别比较大,所以一般每个客户都会配置其个性…

avue多选列表根据后端返回的某个值去判断是否选中;avue-curd多选回显

效果如上: getSiteList().then(res > {//列表数据this.siteData res.data.datathis.$nextTick(()>{this.siteData.forEach(item>{//业务条件if(item.configid&&item.configid!0&&item.configid>0){//符合条件时调用选中的方法this.$…

BootstrapBlazor组件使用:数据注解

文章目录 前言BB数据注解数据注解源码数据注解简介注解简单实例[BB 编辑弹窗](https://www.blazor.zone/edit-dialog)[ValidateForm 表单组件](https://www.blazor.zone/validate-form)使用简介 前言 BootstrapBlazor(一下简称BB)是个特别好用的组件,基本上满足了大…

全球网络加速器GA和内容分发网络CDN,哪个更适合您的组织使用?

对互联网用户来说,提供最佳的用户体验至关重要:网页加载时间过长、视频播放断断续续以及服务忽然中断等问题都足以在瞬间失去客户。因此可以帮助提高您的网站或APP提高加载性能的解决方案就至关重要:全球网络加速器和CDN就是其中的两种解决方…

基于Spring Boot的游泳馆管理系统的设计与实现(Java+spring boot+MySQL)

获取源码或者论文请私信博主 演示视频: 基于Spring Boot的游泳馆管理系统的设计与实现(Javaspring bootMySQL) 使用技术: 前端:html css javascript jQuery ajax thymeleaf 微信小程序 后端:Java spring…