局部整体(七)利用python绘制圆形嵌套图

news2024/12/24 11:30:49

局部整体(七)利用python绘制圆形嵌套图

圆形嵌套图( Circular Packing)简介

1

将一组组圆形互相嵌套起来,以显示数据的层次关系,类似于矩形树图。数据集中每个实体都由一个圆表示,圆圈大小与其代表的值成正比,相对于treemap,圆堆图更直观简洁,虽然利用率上有缺陷。

快速绘制

  1. 基于circlify

    import circlify
    import matplotlib.pyplot as plt
    
    # 自定义数据
    data = [{'id': 'World', 'datum': 6964195249, 'children' : [
                  {'id' : "North America", 'datum': 450448697,
                       'children' : [
                         {'id' : "United States", 'datum' : 308865000},
                         {'id' : "Mexico", 'datum' : 107550697},
                         {'id' : "Canada", 'datum' : 34033000} 
                       ]},
                  {'id' : "South America", 'datum' : 278095425, 
                       'children' : [
                         {'id' : "Brazil", 'datum' : 192612000},
                         {'id' : "Colombia", 'datum' : 45349000},
                         {'id' : "Argentina", 'datum' : 40134425}
                       ]},
                  {'id' : "Europe", 'datum' : 209246682,  
                       'children' : [
                         {'id' : "Germany", 'datum' : 81757600},
                         {'id' : "France", 'datum' : 65447374},
                         {'id' : "United Kingdom", 'datum' : 62041708}
                       ]},
                  {'id' : "Africa", 'datum' : 311929000,  
                       'children' : [
                         {'id' : "Nigeria", 'datum' : 154729000},
                         {'id' : "Ethiopia", 'datum' : 79221000},
                         {'id' : "Egypt", 'datum' : 77979000}
                       ]},
                  {'id' : "Asia", 'datum' : 2745929500,  
                       'children' : [
                         {'id' : "China", 'datum' : 1336335000},
                         {'id' : "India", 'datum' : 1178225000},
                         {'id' : "Indonesia", 'datum' : 231369500}
                       ]}
        ]}]
    
    # 计算圆的位置
    circles = circlify.circlify(
        data, 
        show_enclosure=False, # 不展示最外层的圈
        target_enclosure=circlify.Circle(x=0, y=0, r=1)
    )
    
    # 初始化布局
    fig, ax = plt.subplots(figsize=(8,8))
    ax.axis('off')
    
    # 标题
    ax.set_title('Repartition of the world population')
    
    # 轴范围设置
    lim = max(
        max(
            abs(circle.x) + circle.r,
            abs(circle.y) + circle.r,
        )
        for circle in circles
    )
    plt.xlim(-lim, lim)
    plt.ylim(-lim, lim)
    
    # 绘制所有level=2的圆(各大洲)
    for circle in circles:
        if circle.level != 2:
            continue
        x, y, r = circle
        ax.add_patch( plt.Circle((x, y), r, alpha=0.5, linewidth=2, color="lightblue"))
    
    # 绘制level=3的圆(各大洲的各个国家),并标注国家名称
    for circle in circles:
        if circle.level != 3:
            continue
        x, y, r = circle
        label = circle.ex["id"]
        ax.add_patch( plt.Circle((x, y), r, alpha=0.5, linewidth=2, color="#69b3a2"))
        plt.annotate(label, (x,y ), ha='center', color="white")
    
    # 为所有level=2的圆(各大洲)标注名称
    for circle in circles:
        if circle.level != 2:
            continue
        x, y, r = circle
        label = circle.ex["id"]
        plt.annotate(label, (x,y ) ,va='center', ha='center', bbox=dict(facecolor='white', edgecolor='black', boxstyle='round', pad=.5))
    

    2

总结

以上利用circlify并结合matplotlib来绘制基本的圆形嵌套图。

共勉~

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

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

相关文章

Spring Task 调度任务

Spring Task是调度任务框架,通过配置,程序可以按照约定的时间自动执行代码逻辑,基于注解方式实现需要如下注解: Component 任务调度类交给Spring IOC容器管理EnableScheduling 启用 Spring 的定时任务(Scheduling&…

专业学习|随机规划概观(内涵、分类以及例题分析)

一、随机规划概览 (一)随机规划的定义 随机规划是通过考虑随机变量的不确定性来制定优化决策的一种方法。其基本思想是在决策过程中,目标函数和约束条件可以包含随机因素。 (1)重点 随机规划的中心问题是选择参数&am…

最新版ingress-nginx-controller安装 使用host主机模式

最新版ingress-nginx-controller安装 使用host主机模式 文章目录 最新版ingress-nginx-controller安装 使用host主机模式单节点安装方式多节点高可用安装方式 官方参考链接: https://github.com/kubernetes/ingress-nginx/ https://kubernetes.github.io/ingress-ng…

05_中断与数码管动态显示

中断是单片机系统重点中的重点,因为有了中断,单片机就具备了快速协调多模块工作的能力,可以完成复杂的任务。本章将首先带领大家学习一些必要的 C 语言基础知识,然后讲解数码管动态显示的原理,并最终借助于中断系统来完…

VS code user setting 与 workspace setting 的区别

VS code user setting 与 workspace setting 的区别 引言正文引言 相信有不少开始接触 VS code 的小伙伴会有疑问,user setting 与 workspace setting 有什么区别呢?这里我们来说明一下 正文 首先,当我们使用 Ctrl + Shift + P 打开搜索输入 setting 后,可以弹出 4 个se…

SSM+Vue家教平台系统

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 spring-mybatis.xml3.5 spring-mvc.xml3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平台Java领域优质创作…

网站建设中,https协议和http协议分别是什么,有什么区别?

HTTP(超文本传输协议)和 HTTPS(安全超文本传输协议)是互联网通信中两种非常关键的协议,它们在安全性、性能以及证书等方面存在区别。以下是具体分析: 安全性 HTTP:数据传输以明文形式进行&#…

宝塔搭建nextcould 30docker搭建onlyoffic8.0

宝塔搭建nextcould 宝塔搭建nextcould可以参考这两个博文 我搭建的是30版本的nextcould,服务组件用的是下面这些,步骤是一样的,只是版本不一样而已 nginx 1.24.0 建议选择nginx,apache没成功。 MySQL 8.0以上都可以 php 8.2.…

“你好BOE”重磅亮相首届上海国际光影节 打造“艺术x科技”顶级影像盛宴

黄浦江畔,北外滩胜地。作为首届上海国际光影节虹口区分会场的重点项目之一,9月29日-10月5日,BOE(京东方)年度标杆性品牌巡展IP“你好BOE”Super O SPACE影像科技展在上海北外滩滨江5米平台盛大启幕,BOE(京东方)携手上海电影、上影元、OUTPUT、新浪微博、海信、OPPO、京东等众多…

信创产品测试报告有什么作用?测试依据是什么?

一、信创产品测试报告是什么? 针对于某一款具体的软件产品或硬件产品进行的产品测试,验证其是否符合信创的要求。这一类产品,主要分为四类: 三类九款产品(计算机终端、操作系统、数据库);通用…

【Python快速学习笔记02】基础语法学习(变量等)

目录 1.标识符与代码书写注意点 2.变量类型 1.标识符与代码书写注意点 (1)组成:字母,下划线,数字 (2)注意点:但是不能由数字开头,区分大小写 (3&#xff…

AltiumDesigner脚本开发-DIP封装制作

1.点击工具栏的运行工具(蓝色向右三角图标)可以执行脚本程序; 2.点击菜单栏Run->Run可以执行脚本程序; 3.在脚本编辑器中,按键盘的F9键可以执行脚本程序; 4.通过菜单栏执行脚本程序(需要将程序添加到菜单栏中&am…

Qt多线程操作sqlite数据库

问题 就是为了多线程操作sqlite数据库,为什么,因为数据库是耗时的操作,一条数据的插入,差不多200ms,如果是数据插入多了,界面会有明显的卡顿,因此必须,多线程操作数据库。 问题是这样的: 插入数据之后,接着更新界面;然而,插入数据是比较耗时的操作,尤其插入数据…

【无人机设计与技术】四旋翼无人机的建模

摘要 本项目的目标是通过 Simulink 建模和仿真,研究四旋翼无人机的建模、姿态控制、定点位置控制及航点规划功能。无人机建模包含了动力单元模型、控制效率模型和刚体模型,并运用这些模型实现了姿态控制和位置控制。姿态控制为无人机的平稳飞行提供基础…

Google Tag Manager - 服务器端代码植入

服务端跟踪出现的原因; 服务端跟踪主要有两个原因: 法律法规日趋严格,如GDPR,CCPA的的实施,对用户隐私保护越加严格,服务端跟踪可以让你对数据有完整的控制,你可以控制哪些数据可以发送给第三方…

墙绘交易平台设计:SpringBoot技术要点

3 系统分析 当用户确定开发一款程序时,是需要遵循下面的顺序进行工作,概括为:系统分析–>系统设计–>系统开发–>系统测试,无论这个过程是否有变更或者迭代,都是按照这样的顺序开展工作的。系统分析就是分析系…

YOLOv11训练自己的数据集(从代码下载到实例测试)

文章目录 前言一、YOLOv11模型结构图二、环境搭建三、构建数据集四、修改配置文件①数据集文件配置②模型文件配置③训练文件配置 五、模型训练和测试模型训练模型验证模型推理 总结 前言 提示:本文是YOLOv11训练自己数据集的记录教程,需要大家在本地已…

PC流量转移动流量,提升网盘拉新收益

首先,以夸克网盘举例,请看收益明细表。 做网盘拉新,要有高收益,还得靠移动拉新和转存,PC端拉新就2块钱一个人,太少了。 但是,除抖音、小红书这种主打移动端的自媒体平台外。 借助百度和Bing等…

游戏找不到xinput1_3.dll的原因及解决方法

1. xinput1_3.dll 基本信息 1.1 文件名 xinput1_3.dll 是一个动态链接库(DLL)文件,它属于 Microsoft DirectX for Windows 的一部分。这个文件主要负责处理与 Xbox 360 控制器和其他兼容 XInput 标准的游戏手柄相关的输入信号,确…

这款工具在手,前端开发轻松搞定!

这款工具在手,前端开发轻松搞定! 引言 在之前的一篇文章中,已经给大家分享了一款AI助手。尽管该助手能够生成前端代码,但遗憾的是缺少了实时预览的功能。而现在,这一缺憾已经被弥补——你只需要描述你的设计想法&…