ASCII图表是一个非常实用的技巧,用于在纯文本环境中创建视觉结构、流程图、网络拓扑、简单界面原型等。它们在代码注释、命令行输出、README文件、纯文本邮件等场景中尤其有用。
以下尽量全面地介绍主要类型 、常用元素 、典型应用场景 以及创建工具:
一、主要类型的ASCII图表
-
流程图:
-
用途:描述算法、工作流程、决策树。
-
元素:方框表示处理步骤(
[ ]
、+---+
)、菱形表示决策(<>
、/
)、箭头线(->
,-->
,=>
)表示流程方向、连接点。 -
示例:
sql+---------+ +---------+ +---------+ | Start |---->| Process |----->| End | +---------+ +---------+ +---------+ | v +---------+ | Decision|<---+ +---------+ | | Yes | No v | +---------+ | | Action |---+ +---------+
-
-
序列图/时序图:
-
用途:展示对象或组件之间的交互顺序。
-
元素:生命线(
|
或|--
)、消息箭头(->
请求,-->
响应,-->x
异步)、激活条(+-
、|*
)、注释。 -
示例:
luaClient Server | | |-- Request--> | | |<--Response-- | | |-- Ack ---->|
-
-
类图/结构图:
-
用途:展示类、对象、模块之间的关系(继承、实现、关联、依赖等)。
-
元素:类框(
[ClassName]
、+-----------+
)、分隔线(------
)、字段和方法(+field: type
,-method()
)、关系箭头(<|--
继承,o--
关联,..>
依赖)。 -
示例:
lua+-------------------+ +-------------------+ | Vehicle |<|-----| Engine | +-------------------+ +-------------------+ | - model: String | | - type: String | +-------------------+ +-------------------+ / \ | | (实现) | +----------+ | Car | +----------+ | +drive() | +----------+
-
-
网络拓扑图:
-
用途:表示计算机网络中设备(路由器、交换机、服务器、PC)的互连关系。
-
元素:设备符号(
[Router]
,(Switch)
,(Server)
,(PC)
)、连接线(--
,=
,/
)、接口标签([Gi0/1]
)。 -
示例:
lua+------------+ | Internet | | [Router] | +-----+------+ | | +--------+--------+ | | +---+----+ +----+---+ | Switch |-------| Switch | +---+----+ +----+---+ | | +------+-----+ +-----+------+ | (PC1) | | (Server) | +------------+ +------------+
-
-
甘特图/时间线图:
-
用途:显示项目任务在时间轴上的计划和进度。
-
元素:时间轴(
--2014--|--2015--|--2016-->
)、任务条(=====[TaskA]=====...
)、里程碑(*
)。 -
示例:
sqlYear: |--- Q1 ---|--- Q2 ---|--- Q3 ---|--- Q4 ---| Project A: | ============......... | (Planning Done *) Project B: | ---=============...... |
-
-
界面原型/线框图:
-
用途:简单示意软件或网页界面的布局。
-
元素:窗口边框(
+-----+
、|
)、按钮([Button]
)、文本输入框([________]
)、标签(Label:
)、区域分隔符(---
)。 -
示例:
markdown+----------------------------------+ | Login Window | | | | Username: [______________] | | Password: [______________] | | | | [ Login ] [ Cancel ] | +----------------------------------+
-
-
树形结构图:
-
用途:展示文件系统、组织结构、层次化数据。
-
元素:节点、连接线(
|
,/
, ``,--
)。根节点在上方或左侧。 -
示例:
croot ├── dir1 │ ├── file1.txt │ └── file2.txt ├── dir2 │ └── subdir │ └── file3.log └── file4.dat
-
-
状态图:
-
用途:描述对象或系统的状态转换。
-
元素:状态(
(State)
、((State))
)、转移箭头(-->
)、转移标签([Event] / Action
)。 -
示例:
sql[Start] | v +-----+------+ | Idle |<------------------+ +-----+------+ | | [Request] | v | +-----+------+ [Timeout] | | Processing |------------------+ +-----+------+ | [Done] v [End]
-
-
ER图:
-
用途:表示数据库实体及其关系。
-
元素:实体框(
[Entity]
)、属性(| *attribute|
)、关系连线(--<
,>--
,-0-
,-1-
)、基数标识。 -
示例:
sql+-----------+ +----------+ | User |0..* | Order |1..1 +-----------+<>-----<+----------+ | *id: PK | | *id: PK | | name | | date | | email | +----------+ +-----------+
-
-
统计图表:
-
用途:在终端或纯文本中粗略展示柱状图、折线图等。
-
元素:字符块表示高度/数值(
█
,▓
,▒
,░
)、坐标轴(|
、-
、+
)、点(*
,o
,x
)。 -
示例 (柱状图):
lua10 | ██ 8 | ██████ 5 | ████████ 2 | ██████████ --+---------------- Jan Feb Mar Apr
-
示例 (折线图):
css10 | o 8 | o o 5 | o o 2 | o --+-----o-----o----- Q1 Q2 Q3 Q4
-
-
思维导图:
-
用途:发散性思维的记录。
-
元素:中心主题、分支(
->
,--
)、关键词节点。 -
示例:
rustCentral Topic / | \ / | \ -> Sub1 -> Sub2 -> Sub3 / | \ -> Child1 -> Child2 -> Child3
-
-
组织结构图:
- 类似树形结构图,更强调层级和汇报关系。
二、ASCII图表中常用的基本元素和组合
-
线:
-
(单横),=
(双横或粗横),_
(下划线,常用作底边),|
(单竖),:
(点线或虚线横),'
(点线或虚线竖),/
, `` (斜线)。 -
箭头:
->
,<-
,-->
,<--
,=>
,<=
,>>
,<<
,//>
,<\
。 -
角/交叉:
+
(常用连接点),#
(实心交叉)。 -
形状/容器:
- 矩形:
+---+
、| |
、[ ]
、[Txt]
。 - 圆角矩形:
( )
、(Txt)
。 - 菱形:
<>
、/
、/
。 - 圆形/椭圆形:
()
、( )
、(o)
。 - 三角形:
/
、^
。
- 矩形:
-
文本标签/注释: 直接写在框内或线旁。
-
图标/符号:
- 计算机:
[PC]
、(Server)
。 - 网络设备:
[R]
(路由器),[S]
(交换机)。 - 数据库:
(DB)
、[/]
(服务器上放盒子)。 - 云:
( )
、(Cloud)
。 - 人:
(人)
、@
(简单表示)。 - 文档:
[doc]
。 - 齿轮:
[G]
、(o)
。 - 闪电:
!>
(表示警告、错误)。 - 信封:
[E]
。
- 计算机:
-
表格: 使用
-
、+
和|
构建边框和分隔线。
三、工具大全
A. 在线实时编辑工具 (所见即所得)
- Textik: 非常强大且现代的在线ASCII图表编辑器。支持多种类型(流程图、UML、网络拓扑等),有大量预定义形状和图标,实时协作,可导出PNG、PDF、TXT等。强烈推荐!
(搜索:Textik Ascii Diagram)
- ASCIIFlow: 经典在线工具。纯HTML5 Canvas实现,简洁直观,支持直线、箭头、矩形、文本、自由曲线等,适合基本绘图。可直接复制ASCII输出。
(搜索:ASCIIFlow)
- Draw.io / Diagrams.net: 强大的在线图表工具。虽然主要输出矢量图/PNG等,但可以在设置中启用实验性功能导出为ASCII艺术(有时效果一般)。更好的是,它可以通过插件或代码库(如
d2
)连接到ASCII输出管道。(搜索:Diagrams.net)
- Asciiflow: 另一个在线编辑器,与ASCIIFlow类似,但界面略有不同,有时也被使用。
B. 基于文本描述的图表生成器 (Diagram-as-Code)
这是非常流行和强大的方式,尤其适合开发者集成到文档或代码中。
-
PlantUML:
- 最强大的! 专为软件工程图设计,基于Java。
- 支持:序列图、用例图、类图、活动图(流程图)、组件图、部署图、状态图、对象图、甘特图、思维导图、工作分解结构图(WBS)、实体关系图 等等。甚至还支持JSON、YAML可视化、网络图(Nwdiag)、C4模型。
- 语法:使用非常直观的纯文本描述。
- 集成:几乎所有主流编辑器(VS Code, IntelliJ等)都有插件,支持命令行,可集成到Maven/Gradle, Confluence, Jira, MediaWiki等。通常渲染成PNG/SVG等,但也支持导出为ASCII艺术图。
- 社区:庞大且活跃。
(搜索:PlantUML)
-
Mermaid:
- 极其流行! 基于JavaScript的图表库。
- 支持:流程图、序列图、类图、状态图、实体关系图、用户旅程图、甘特图、饼图、需求图、Git图表、思维导图、时间线。原生支持在Markdown中渲染(GitHub/GitLab/Gitee等均支持)。
- 语法:易学且与Markdown集成极佳。
- 导出:主要用于渲染成矢量图/图片。本身不直接输出ASCII,但可以通过一些第三方转换工具(如
mermaid-filter
、mmdc
结合其他工具) 将其生成的SVG/图形转换成ASCII ,或者在终端预览器(如typora
的终端模式)里模拟。
-
Graphviz:
- 经典强大的图可视化工具,核心是布局引擎。
- 语法:使用 DOT 语言描述节点和边的关系。
- 输出:主要生成图片格式(PNG, SVG)。提供
unflatten
或结合其他工具(如graph-easy
)可以将布局结果输出为ASCII文本图。
-
d2 (由 Terrastruct 开发):
- 新兴强大的Diagram-as-Code工具,语法设计现代简洁。
- 支持:流程图、序列图、类图、架构图等,特别强调层级表达。
- 集成/输出:VS Code插件,命令行工具。原生支持将D2文件编译输出为高质量的ASCII艺术图、SVG、PNG等,终端友好。
(搜索:D2 Lang ASCII)
-
BlockDiag系列: (BlockDiag, SeqDiag, ActDiag, NwDiag)
- 基于Python的文本图生成工具,语法类似。
BlockDiag
:框图。SeqDiag
:序列图。ActDiag
:流程图。NwDiag
:网络图。- 可生成图片,也可以通过插件或在终端直接查看ASCII输出(效果较简单)。
-
Diagrams (Python库):
- 基于Python,用代码绘制云系统架构图(AWS, Azure, GCP等)。
- 输出:主要生成PNG/SVG等图片。
- 间接生成ASCII:可以利用其图像输出,再通过图像转ASCII工具处理(效果通常不理想)。
-
Svgbob:
- 将类ASCII的文本描述转换成精美的SVG图。虽然目标是矢量图,但其输入语法是一种高度可读的ASCII艺术形式本身,也能看作是一种生成源。
- 支持编辑器和命令行。
(搜索:Svgbob)
-
Asciio:
- 终端内绘制的TUI工具 。直接在终端内使用键盘绘制ASCII图,可保存为文本文件。适合Linux终端用户。
(搜索:Asciio)
- 终端内绘制的TUI工具 。直接在终端内使用键盘绘制ASCII图,可保存为文本文件。适合Linux终端用户。
-
JavE:
- 功能丰富的Java ASCII艺术编辑器。相对古老和重量级一些。
C. 编辑器/IDE 插件
-
Vim/Neovim:
DrawIt
插件(经典)、vim-diagram
、支持PlantUML的插件(渲染为ASCII或其他)。 -
Emacs: 内置强大的
Artist-mode
或Picture-mode
,直接使用键盘绘制ASCII图。 -
VS Code: 强大的插件生态:
- PlantUML插件
- Mermaid插件/预览器
- d2支持
- Graphviz可视化
- ASCII Artist插件
- 强大的绘图插件
Excalidraw
也可以保存为近似文本表示的格式(但非纯ASCII)。
-
JetBrains IDEs: 强大的PlantUML、Mermaid插件支持。
D. 终端绘图/查看
- graph-easy: Perl编写的工具,能将Graphviz DOT文件、或类似语法、或简单文本描述转换成命令行输出的ASCII图。非常方便快速查看简单关系图。
- Asciinema: 主要用于录制终端会话生成动画ASCII艺术视频。
(搜索:Asciinema)
E. 图像转ASCII工具
-
如果你想将现有图片(如一个截图)转换成ASCII艺术,可以使用这类工具:
- 在线工具:搜
Image to ASCII Art converter
- 命令行工具:
jp2a
(JPEG to ASCII),tiv
(终端图像查看器,有时支持ASCII预览),cacaview
等。
- 在线工具:搜
-
注意:转换结果通常是位图效果的艺术画,不是结构化图表。
选择建议
- 快速简单草图: 用 Textik 或 ASCIIFlow。
- 软件工程图(UML)且需要可版本控制+高质量输出+广泛支持: 首选 PlantUML (支持ASCII导出)。备选 Mermaid (需间接转换)。
- Markdown集成(流程图、序列图等): Mermaid 是最佳选择(GitHub原生支持)。
- 系统架构图: Diagrams (Python, 输出图片),或 d2 (语法简洁,原生支持ASCII输出)。
- 关系图(DOT): Graphviz + graph-easy (输出ASCII到终端)。
- 终端内直接绘制: Vim DrawIt / Emacs Artist-mode / Asciio。
- 纯网络图: PlantUML (nwdiag) 或 BlockDiag系列中的NwDiag。
- 最全面: Textik (在线所见即所得) 和 PlantUml (基于文本描述) 的组合几乎可以覆盖所有需求。
重要提示
- 编码/字体: ASCII图表依赖等宽字体(Monospaced Font)才能正确对齐显示(如
Courier New
,Consolas
,Menlo
,Monaco
,DejaVu Sans Mono
,Source Code Pro
等)。在网页中使用时确保使用<pre>
标签或指定font-family: monospace;
的CSS样式。 - 制表符: 避免使用制表符(
\t
),因为它们在不同环境下的宽度可能不一致,破坏布局。统一使用空格。 - 复杂度: 过于复杂的图表在纯ASCII下可读性会下降。平衡好可视化效果和文本的简洁性。
- 导出格式: 许多工具(尤其是Diagram-as-Code)的主要优势在于输出矢量图/图片,ASCII输出可能是其"副产品"或可选功能。明确你的需求(纯文本还是可导出图片的文本源)。
这份列表应该涵盖了你所能想到的绝大部分ASCII图表类型和相关工具。选择哪一个取决于你的具体需求、个人喜好和工作环境。