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

局部整体(七)利用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:continuex, y, r = circleax.add_patch( plt.Circle((x, y), r, alpha=0.5, linewidth=2, color="lightblue"))# 绘制level=3的圆(各大洲的各个国家),并标注国家名称
    for circle in circles:if circle.level != 3:continuex, y, r = circlelabel = 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:continuex, y, r = circlelabel = 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.mrgr.cn/news/39783.html

相关文章:

  • LangChain进阶技巧:提高聊天机器人性能的策略[第三课]
  • Linux内核 -- 读写文件系统文件之kernel_read与kernel_write
  • SpringBoot整合weixin-java-pay实现微信小程序支付
  • 高效开发:SpringBoot网上租赁系统实现细节
  • Leetcode 981. 基于时间的键值存储
  • 随手记:ul-table表格合并方法
  • 工业交换机的RMON
  • java中有两个list列表,尽量少的去循环
  • 2024 年 25 款最佳入侵检测软件推荐 - 网络安全必备,零基础入门到精通,收藏这一篇就够了
  • 谷歌浏览器完美清除缓存
  • 一图看懂好利来老鼠接奶酪SVG交互|伸长+滑动叠加排版|E2.COOL黑科技SVG编辑器
  • 匿名管道 Linux
  • 前端css样式设置元素的绝对定位和相对定位,要注意宽度和高度的设置
  • 一条命令Docker安装常用桌面linux系统含一些系统和应用
  • 数据结构(链表的操作算法)
  • 不带头结点单链表逆置递归实现---未验证
  • 如何选择合适的量化交易策略,回测与模拟交易的实战演练
  • java-netty客户端断线重启0.9.0
  • Vim常见模式介绍,你知道哪些?
  • find()和findIndex()方法