发布于 2026-01-05 0 阅读
0

图即代码:为视觉内容创建动态交互式文档 🎨 图即代码 什么是图?教程 🎨 图:节点库 🎨 图即代码:为视觉内容创建动态交互式文档 什么是图? 📚 参考资料

图即代码:为视觉内容创建动态交互式文档

🎨 图表即代码

什么是图表?

教程

🎨 图表:节点

存储库

🎨 图表即代码:为视觉内容创建动态交互式文档

什么是图表?

📚 参考资料

本文将一步步指导您使用“图表即代码”工具创建动态交互式可视化文档。我们将以编程方式生成图表,而非静态图像,从而确保图表始终保持最新状态且易于维护。


🎨 图表即代码

“图即代码”是一种允许您通过代码而非传统图形工具创建图表的方法。您无需手动构建图表,只需在文本文件中编写代码即可定义图表的结构、组件和连接。

然后,这段代码会被转换成图形图像,从而更容易在软件项目中进行集成和记录,尤其适用于以编程方式创建和更新架构图和流程图。


什么是图表?

Diagrams是一个Python 库,它实现了“图表即代码”的方法,使您能够通过代码创建架构基础架构图和其他类型的图表。借助 Diagrams,您只需几行代码即可轻松定义云基础架构组件(例如AWSAzure平台、云服务器和GCP云终端)、网络元素、软件服务等等。

🎉 图即代码的优势

  • 📝将图表表示为代码:直接从代码创建和更新图表,确保敏捷项目中的可维护性。
  • 📑自动化文档:根据代码生成可视化图表,使图表与当前架构保持一致。
  • 🔄变更控制:跟踪图表随时间的变化。
  • 🔍增强清晰度:通过清晰、共享的视觉效果,提高对复杂系统的理解。
  • ✏️可定制:以灵活且定制的视觉效果表示云基础设施、工作流程或数据管道。

教程

🐍 图书馆安装

我目前使用的是版本号'0.23.4'进行本教程教程的讲解。

!pip install diagrams=='0.23.4'
Enter fullscreen mode Exit fullscreen mode

🎨 图表:节点

该库允许您以编程方式创建架构图,使用节点来表示不同的基础设施组件和服务。


节点类型

图中的节点代表来自不同云服务提供商的组件以及其他架构元素。以下是可用节点的主要类别:

  • ☁️云服务提供商:AWS(亚马逊网络服务)、Azure、GCP、IBM Cloud、阿里云、Oracle Cloud、DigitalOcean 等。
  • 🏢本地部署:指物理上位于公司场所内的基础设施。
  • 🚢 Kubernetes (K8S):容器编排系统,用于自动化部署、扩展和管理容器化应用程序(以船舵表示,象征控制和导航)。
  • 🖥️ OpenStack:用于创建和管理公有云和私有云的开源软件平台。
  • 🔧通用:通用节点可以表示任何未被提供商特定节点明确涵盖的组件(交叉工具,表示一个类别中的不同工具)。
  • ☁️ SaaS(软件即服务):指通过互联网以服务形式交付的应用程序,例如 Snowflake、聊天服务(Slack、Teams、Telegram 等)、安全服务(例如 Okta)或社交网络(SaaS 概念中已排除电话和云服务)。
  • 🔧自定义:允许用户使用存储在特定文件夹中的 PNG 图标自定义图表。这对于表示默认节点未涵盖的基础架构组件(已划掉的自定义工具)非常有用。

💻 编程语言

图表允许您使用不同的节点来表示各种编程语言。这些节点有助于在图表中指示架构的任何部分是否使用了以特定编程语言开发的脚本或组件。

下面我们将展示库中所有可用的语言。如果缺少某种语言,您可以通过将相应的徽标上传到指定文件夹来添加自定义节点。

# Create the diagram object
with diagrams.Diagram("Programming Languages", show=False, filename="languages"):
    # Get all the languages available in this library
    languages = [item for item in dir(diagrams.programming.language) if item[0] != '_']

    # Divide the representation in two lines
    mid_index = len(languages) // 2
    first_line = languages[:mid_index]
    second_line = languages[mid_index:]

    # Add nodes in the first row
    prev_node = None

    for language in first_line:
        current_node = eval(f"diagrams.programming.language.{language}(language)")
        if prev_node is not None:
            prev_node >> current_node
        prev_node = current_node

    # Add nodes in the second row
    prev_node = None

    for language in second_line:
        current_node = eval(f"diagrams.programming.language.{language}(language)")
        if prev_node is not None:
            prev_node >> current_node
        prev_node = current_node

Image("languages.png")
Enter fullscreen mode Exit fullscreen mode


☁️ AWS(亚马逊网络服务)

我们可以使用亚马逊节点,这些节点分为几个类别,例如:

  • 分析与业务:aws.analytics、aws.business
  • 计算和存储:aws.compute、aws.storage、aws.cost
  • 数据库和开发工具:aws.database、aws.devtools
  • 集成与管理:aws.integration、aws.management
  • 机器学习与移动应用:aws.ml、aws.mobile
  • 网络与安全:aws.network、aws.security
  • 其他:aws.blockchain、aws.enduser、aws.engagement、aws.game、aws.general、aws.iot、aws.media、aws.migration、aws.quantum、aws.robotics、aws.satellite

接下来,我们将表示其中一类,以可视化其中的可用节点aws.database

from diagrams import Diagram
from IPython.display import Image
import diagrams.aws.database as aws_database


database_components = []
for item in dir(aws_database):
    if item[0] != '_':
        if not any(comp.startswith(item) or item.startswith(comp) for comp in database_components):
            database_components.append(item)


with Diagram("AWS Database", show=False, filename="aws_database"):
    mid_index = len(database_components) // 2
    first_line = database_components[:mid_index]
    second_line = database_components[mid_index:]


    prev_node = None
    for item_database in first_line:
        current_node = eval(f"aws_database.{item_database}(item_database)")
        if prev_node is not None:
            prev_node >> current_node
        prev_node = current_node


    prev_node = None
    for item_database in second_line:
        current_node = eval(f"aws_database.{item_database}(item_database)")
        if prev_node is not None:
            prev_node >> current_node
        prev_node = current_node

Image("aws_database.png")
Enter fullscreen mode Exit fullscreen mode


☁️ 用例

现在,让我们创建一个简单的蓝图,该蓝图对应于在AWS上导入数据集和训练机器学习模型

from diagrams import Diagram, Cluster
from diagrams.aws.storage import S3
from diagrams.aws.analytics import Glue, Athena
import diagrams.aws.ml as ml
from diagrams.aws.integration import StepFunctions
from diagrams.aws.compute import Lambda
from diagrams.aws.network import APIGateway
from IPython.display import Image

with Diagram("AWS Data Processing Pipeline", show=False):

    lambda_raw = Lambda('Get Raw Data')
    # Buckets de S3
    with Cluster("Data Lake"):
        s3_rawData = S3("raw_data")
        s3_stage = S3("staging_data")
        s3_data_capture = S3("data_capture")


    athena = Athena("Athena")
    s3_rawData >> athena
    s3_stage >> athena
    s3_data_capture >> athena

    #  Step Functions Pipeline
    with Cluster("Data Processing Pipeline"):
        step_functions = StepFunctions("Pipeline")

        # Glue Jobs in Step Functions
        with Cluster("Glue Jobs"):
            data_quality = Glue("job_data_quality")
            transform = Glue("job_data_transform")
            dataset_preparation = Glue("job_dataset_model")

        # Define Step Functions Flows
        step_functions >> data_quality >> transform >> dataset_preparation
        s3_rawData >> data_quality

    # SageMaker for model training and deployment
    with Cluster("SageMaker Model Deployment"):
        train_model = ml.SagemakerTrainingJob("job_train_model")
        eval_model = ml.SagemakerGroundTruth("job_evaluate_model")
        endpoint = ml.SagemakerModel("model_enpoint")

    # API Gateway and Lambda for the endpoint
    api_gateway = APIGateway("API_gateway")
    lambda_fn = Lambda("invoke_endpoint")

    # Connection
    lambda_raw >> s3_rawData
    s3_stage >> train_model >> eval_model >> endpoint
    endpoint >> lambda_fn >> api_gateway
    endpoint >> s3_data_capture
    dataset_preparation >> train_model


Image("aws_data_processing_pipeline.png")

Enter fullscreen mode Exit fullscreen mode


存储库

以下是所有代码的链接。如果您觉得有用,可以点个星⭐️并关注我,以便接收新文章的通知。这将有助于我在技术社区发展,并创作更多内容。

GitHub 标志 r0mymendez / diagram-as-code

本教程将介绍如何使用“文档即图表”方法创建文档项目。

请我喝杯咖啡


🎨 图表即代码:为视觉内容创建动态交互式文档

“图即代码”是一种允许您通过代码而非传统图形工具创建图表的方法。您无需手动构建图表,只需在文本文件中编写代码即可定义图表的结构、组件和连接。

图片描述

然后,这段代码会被转换成图形图像,从而更容易在软件项目中进行集成和记录,尤其适用于以编程方式创建和更新架构图和流程图。

什么是图表?

Diagrams是一个Python 库,它实现了“图表即代码”的方法,使您能够通过代码创建架构基础架构图和其他类型的图表。借助 Diagrams,您只需几行代码即可轻松定义云基础架构组件(例如AWSAzure平台、云服务器和GCP云终端)、网络元素、软件服务等等。

🎉 图即代码的优势

  • 📝…




如果您想了解如何使用此流程实现文档网站,可以阅读我发布的以下链接中的文章。


📚 参考资料

  1. 图表: https://diagrams.mingrammer.com/
文章来源:https://dev.to/r_elena_mendez_escobar/diagram-as-code-creating-dynamic-and-interactive-documentation-for-visual-content-2p93