使用pyecharts绘制系统依赖关系图

使用pyecharts绘制系统依赖关系图

背景介绍

近期梳理了公司内部系统之间的数据关系,得到了多个excel格式的统计文件,每个文件包含了该系统自身数据清单、依赖的其他系统的数据清单、对其他系统供应的数据清单。
各系统之间依赖关系复杂,所以我想使用一些绘图工具,以可视化图形图表的形式展现这些系统之间的数据关系,给观众形成一种非常直观的印象。

一般情况下,应该是有类似于调用链跟踪等工具,比如Java技术栈使用Skywalking或美团CAT等工具,做到调用级别上的跟踪和相互关系的可视化展示。
这种情况下,也许不需要再编写程序来绘制依赖关系了。这两种工具可以很详细的绘制组件或服务之间的调用关系。

不过,本文介绍如何绘制粒度稍微粗一些的关系图,没有细化到具体某个接口调用。主要的工具是pyecharts,百度开源的工具包。在绘制的时候,只使用了依赖表和对外供应两张表。

可视化思路

可视化的方式有很多种,我的需求是以最小成本,最快速度把这个可视化效果达成。不管是使用类似思维导图或draw.io这种工具,或者是编码实现,只要可以实现,任何方式都可以考虑。

我考虑的第一种方式,是使用draw.io。它确实提供了很多模型,但是最终我发现,手动去绘图,会花很多时间,然后效果还一般。
大概花了总共2小时的时间,发现用draw.io来绘制十多个系统之间复杂的连接,还是有点难。

所以,我考虑第二种方式是使用思维导图。确实思维导图很快可以把图建立起来,因为执行一次回车操作就可以生成一个方框,速度非常快。但是我嫌这个图不好看。
还没等我完成全部的系统和系统之间的连线,我就不想再做下去了。

最后,我决定使用编码的方式实现。这样的好处有两点:第一是生成的图形会很好看,效果好,第二是后续的维护会自动化,一劳永逸。

实现可视化

经过调研了几个框架,包括pyecharts,politly,最终我发现pyecharts的关系图其实可以实现我的想法。

我基于https://gallery.pyecharts.org/#/Graph/graph_les_miserables这个案例实现了想要的效果。

效果图如下,使用菱形图表示系统,圆形便是系统的数据:
result1.png

编码实现

相关的代码或文件分三部分,第一部分是包含系统关系的原始文件,放在files_excel目录下,第二部分是用于生成表示图形信息的json文件的python脚本build_json_system_relation.py,第三部分是绘制图形的代码文件generate_relations.py

代码地址:https://gitee.com/zackli518/charts_system_relations/tree/master

数据关系文件

files_excel目录下的文件,每个文件包含两个sheet(表单),即对外供应数据表清单所依赖外部系统数据表清单

对外供应数据表清单表单的格式如下:

目的系统 数据英文名 数据中文名 数据交换方式
B table1 数据1 交易线
C table2 数据2 数据线
D table3 数据3 数据线

所依赖外部系统数据表清单表单的格式与上面类似,不过第一列是源系统。

上述两个文件就是我们要使用到的系统数据关系文件。如果有工具可以产生上述文件,那所有的步骤都可以自动化完成,包括生成本文讲的这种简单的关系图。如果不能自动生成,那么可能需要人工维护。所以建议还是都能实现自动化。关于如何产生上述关系,不在本文范围内,不过我觉得这种关系在任何一家公司都会维护起来的,比如通过提供一个维护页面维护上述两张表。

生成表示图形中节点和边的JSON文件

现在我们已经有了原始关系文件,这种文件一般是for人类的,就是说给人看和维护的。那么现在我们需要把它们转成给代码使用的json文件。

json文件格式大致如下,可以先了解一下:

{
   
  "categories": [
    {
   
      "name": "data node",
      "symbol": "circle"
    },
    {
   
      "name": "system node",
      "symbol": "diamond"
    }
  ],
  "nodes": [
    {
   
      "label": "SYSTEM_A",
      "id": "SYSTEM_A",
      "category": 0
    },
    {
   
      "label": "SYSTEM_B",
      "id": "SYSTEM_B",
      "category": 1
    },
    {
   
      "label": "SYSTEM_C",
      "id": "SYSTEM_C",
      "category": 1
    },
    {
   
      "label": 
  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
pyecharts是一种基于Python的可视化库,可以绘制多种表,包括折线、柱状、散点等。下面是一个简单的例子,演示如何使用pyecharts绘制折线。 首先,需要安装pyecharts和其依赖项。可以使用pip命令进行安装: ```python pip install pyecharts ``` 然后,可以按照以下步骤绘制折线: 1. 导入所需要的模块: ```python from pyecharts import options as opts from pyecharts.charts import Line ``` 2. 创建一个Line对象: ```python line = Line() ``` 3. 设置折线的标题、x轴和y轴的标签: ```python line.set_global_opts(title_opts=opts.TitleOpts(title="折线示例"), xaxis_opts=opts.AxisOpts(name="x轴"), yaxis_opts=opts.AxisOpts(name="y轴")) ``` 4. 添加折线数据: ```python line.add_xaxis(['一月', '二月', '三月', '四月', '五月', '六月']) line.add_yaxis('销售额', [100, 200, 300, 400, 500, 600]) ``` 5. 渲染折线: ```python line.render("line_chart.html") ``` 完整的代码如下: ```python from pyecharts import options as opts from pyecharts.charts import Line # 创建一个Line对象 line = Line() # 设置折线的标题、x轴和y轴的标签 line.set_global_opts(title_opts=opts.TitleOpts(title="折线示例"), xaxis_opts=opts.AxisOpts(name="x轴"), yaxis_opts=opts.AxisOpts(name="y轴")) # 添加折线数据 line.add_xaxis(['一月', '二月', '三月', '四月', '五月', '六月']) line.add_yaxis('销售额', [100, 200, 300, 400, 500, 600]) # 渲染折线 line.render("line_chart.html") ``` 执行完上述代码后,会在当前目录下生成一个名为“line_chart.html”的文件,打开该文件即可查看绘制的折线

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值