当前位置: 首页 > article >正文

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

局部整体(七)利用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.kler.cn/news/326269.html

相关文章:

  • 2024/9/29周报
  • SpringMVC5-域对象共享数据
  • NIO基础
  • Java集合ArrayList的扩容原理是什么?附源码讲解+举例说明
  • DSPy101
  • 有源滤波器故障怎么处理
  • Redis哨兵模式的搭建以及配置参数简介
  • websocket接收文心一言示例
  • 【系统架构设计师】经典论文:轮软件三层架构设计
  • ClickHouse | 入门
  • Python鸭子类型解释
  • ubuntu 下载安装 启动盘创建器,将ubuntu22.04的Ios文件,制作成启动盘
  • C++(string字符串、函数)
  • Python知识点:如何使用Airflow进行ETL任务调度
  • 2024 Python3.10 系统入门+进阶(十六):正则表达式
  • 如何提升网页加载和跳转速度:Flask 模板渲染 vs Nginx 静态资源处理
  • 数商云B2B2C商城系统如何帮企业降本增效
  • 【Linux】模拟实现一个shell
  • 六、设计模式-6.2、代理模式
  • 鸿蒙 如何退出 APP
  • JSON字符串转换成对象
  • 嵌套的JSON字符串解析成Java对象
  • 瑜伽馆预约小程序,在线瑜伽课程预约系统
  • 希捷电脑硬盘好恢复数据吗?探讨可能性、方法以及注意事项
  • 1. 如何在服务器上租GPU跑实验 (以AutoDL为例) - 深度学习·科研实践·从0到1
  • C++ 机器人相关面试点
  • 清华大学开源视频转文本模型——CogVLM2-Llama3-Caption
  • 因果推断学习
  • Flink集群部署
  • 面试知识点总结篇四