python 打印人口分布金字塔图

news2024/12/23 22:20:14

背景

今天介绍一个不使用 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模块输出人口金字塔图的使用方法了,希望可以帮到大家。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基础论文学习(4)——CLIP

《Learning Transferable Visual Models From Natural Language Supervision》 CLIP的英文全称是Contrastive Language-Image Pre-training,即一种基于对比文本-图像对的预训练模型。CLIP是一种基于对比学习的多模态模型,与CV中的一些对比学习方法如moc…

软考高级架构师下篇-12层次式架构设计理论与实践

目录 1. 考情分析2. 层次式体系结构概述3. 表现层框架设计4. 中间层框架设计5. 数据访问层设计6. 数据架构规划与设计7. 物联网层次架构设计7. 前文回顾1. 考情分析 根据考试大纲,层次式架构设计理论与实践知识点会涉及单选题型(约占2~5分)和案例题(25分),本小时内容偏重于方…

lesson9: C++多线程

1.线程库 1.1 thread类的简单介绍 C11 中引入了对 线程的支持 了&#xff0c;使得 C 在 并行编程时 不需要依赖第三方库 而且在原子操作中还引入了 原子类 的概念。要使用标准库中的线程&#xff0c;必须包含 < thread > 头文件 函数名 功能 thread() 构造一个线程对象…

LCD液晶屏接口静电浪涌保护用TVS/ESD二极管,如何选型?

LCD 液晶屏是Liquid Crystal Display 的简称&#xff0c;指将玻璃和LCD驱动器集成到一起的LCD显示产品&#xff0c;为用户提供了一个标准的LCD显示驱动接口&#xff0c;用户可以按照接口&#xff08;有4位、8位、VGA等不同类型&#xff09;要求进行操作来控制LCD正确显示。众所…

Fsm onehot

module top_module(input in,input [9:0] state,output [9:0] next_state,output out1,output out2);assign out1(state[8]|state[9])?1:0;assign out2(state[9]|state[7])?1:0;assign next_state[0](state[0]&(~in)) |(state[1]&(~in)) |(state[2]&(~in)) |(sta…

LVS+Keepalived 实验

Keepalived 是什么 Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案&#xff0c;可以解决静态路由出现的单点故障问题的一款检查工具 在一个LVS服务集群中通常有主服务器&#xff08;MASTER&#xff09;和备份服务器&#xff08;BACKUP&#xff09;两种角色的服务器…

ShardingSphere01-docker环境安装

使用docker安装数据库是一个非常好的选择&#xff0c;后续的读写分离、数据分片等功能的数据库都是由docker创建。 一、安装准备 1、前提条件 Docker可以运行在Windows、Mac、CentOS、Ubuntu等操作系统上 Docker支持以下的CentOS版本&#xff1a; CentOS 7 (64-bit)CentOS …

LLM预训练大型语言模型Pre-training large language models

在上一个视频中&#xff0c;您被介绍到了生成性AI项目的生命周期。 如您所见&#xff0c;在您开始启动您的生成性AI应用的有趣部分之前&#xff0c;有几个步骤需要完成。一旦您确定了您的用例范围&#xff0c;并确定了您需要LLM在您的应用程序中的工作方式&#xff0c;您的下…

第59步 深度学习图像识别:误判病例分析(TensorFlow)

基于WIN10的64位系统演示 一、写在前面 本期内容对等于机器学习二分类系列的误判病例分析&#xff08;传送门&#xff09;。既然前面的数据可以这么分析&#xff0c;那么图形识别自然也可以。 本期以mobilenet_v2模型为例&#xff0c;因为它建模速度快。 同样&#xff0c;基…

Linux下Jenkins安装 (最新)

环境概述 随着软件开发需求及复杂度的不断提高&#xff0c;团队开发成员之间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题。Jenkins自动化部署可以解决集成、测试、部署等重复性的工作&#xff0c;工具集成的效率明显高于人工操作&#xff1b…

Android动画进阶指北

原文链接 Android Animation Advanced Tricks 前面的文章介绍了动画的基本使用方法&#xff0c;本文来聊一聊涉及到动画的高级技巧&#xff0c;以及一些非常优质的学习资源和动画三方库和框架。 页面之间的过渡动画 常规的动画都是针对某一页面上的某个元素做动画&#xff0c…

3、Spring_容器执行

容器执行点 1.整合 druid 连接池 添加依赖 <dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.8</version> </dependency>1.硬编码方式整合 新建德鲁伊配置 <?xml version"1.…

微信小程序 车牌号输入组件

概述 一个小组件&#xff0c;用于方便用户输入车牌号码 详细 概述 有时候我们开发过程中会遇到需要用户输入车牌号的情况&#xff0c;让客户通过自带键盘输入&#xff0c;体验不好且容易出错&#xff0c;例如车牌号是不能输入O和I的&#xff0c;因此需要有一个自定义的键盘…

FPGA中锁存器(latch)、触发器(flip-flop)以及寄存器(register)详解

文章目录 1 定义1.1 锁存器&#xff08;latch&#xff09;1.2 触发器&#xff08;flip-flop&#xff09;1.3 寄存器&#xff08;register&#xff09; 2 比较2.1 锁存器&#xff08;Latch&#xff09;危害即产生原因2.2 寄存器和锁存器的区别2.3 锁存器和触发器的区别 3 结构3.…

dvwa环境搭建

靶场搭建 环境作用apache网站代理&#xff0c;部署网站php一种开源通用脚本语言&#xff0c;用来处理程序mysql数据库&#xff0c;用来存储数据 1.打开sever 2008&#xff0c;远程桌面连接&#xff0c;将文件拷贝到虚拟机&#xff0c;打开微软常用集合运行库&#xff0c;等待…

「Vue|网页开发|前端开发」01 快速入门:用vue-cli快速写一个Vue的HelloWorld项目

本文主要介绍如何用vue开发的标准化工具vue-cli快速搭建一个符合实际业务项目结构的hello world网页项目并理解vue的代码文件结构以及页面渲染流程。 文章目录 一、准备工作&#xff1a;安装node.js二、项目搭建创建项目目录全局安装vue-cli使用Webpack初始化项目启动项目学会…

RedisDesktopManager 连接redis

redis查看是否启动成功 ps -ef | grep redis以上未启动成功 cd /usr/local/bin/ 切换根目录 sudo -i 开启服务端 ./redis-server /usr/local/redis/redis.conf 开启客户端 ./redis-cli

Ganache 本地测试网远程连接

文章目录 前言1. 安装Ganache2. 安装cpolar3. 创建公网地址4. 公网访问连接5. 固定公网地址 前言 Ganache 是DApp的测试网络&#xff0c;提供图形化界面&#xff0c;log日志等&#xff1b;智能合约部署时需要连接测试网络。 Ganache 是一个运行在本地测试的网络,通过结合cpol…

MySQL如何进行表之间的关联更新

在实际编程工作或运维实践中&#xff0c;对MySQL数据库表进行关联更新是一种比较常见的应用场景&#xff0c;比如在电商系统中&#xff0c;订单表里保存了商品名称的信息&#xff08;冗余字段设计&#xff09;&#xff0c;但如果商品名称发生变化&#xff0c;则需要通过关联商品…

[已解决]SpringBoot 返回日期时间格式不正确

最近开发中不知道为什么&#xff0c;返回给前端的日期时间格式变成了这样子&#xff0c;晚了8小时&#xff0c;在网上找了解决办法&#xff1a; 原返回值&#xff1a; 需要修改的地方&#xff1a; 在application.yml中添加下面的代码&#xff0c;重启springboot项目即可。 sp…