绘制顺序图

49
我正在寻找一种简单的语言/命令行实用程序来绘制序列时序图(可以是两个不同的工具)。我已经找到了Mscgen用于绘制序列图,看起来非常不错,但我正在研究其他可能性。
谢谢。

对于使用Graphviz实现序列图,请参见https://dev59.com/W0nSa4cB1Zd3GeqPPI8G,我认为mscgen似乎是更好的选择。 - marapet
mscgen 得到了我的支持。 - philcolbourn
9个回答

35

PlantUML. http://plantuml.sourceforge.net/sequence.html

PlantUML用于绘制UML图,使用简单且易于阅读的文本描述。

生成的图片可以在不涉及GPL/LGPL/ASL/EPL/MIT许可证的情况下使用。甚至不必指明它们是由PlantUML生成的,尽管这将受到PlantUML团队的赞赏。

根据我的经验,PlantUML易于使用,而且能够生成漂亮的图表。 我强烈推荐它。

输出文件类型:

-tsvg     To generate images using SVG format
-teps     To generate images using EPS format
-txmi     To generate XMI file for class diagram
-thtml    To generate HTML files for class diagram
-ttxt     To generate images with ASCII art
-tutxt    To generate images with ASCII art using Unicode characters
这是一个示例,展示了如何创建一个简单的序列图。 enter image description here
@startuml
Alice -> Bob: Authentication Request
Bob --> Alice: Authentication Response

Alice -> Bob: Another authentication Request
Alice <-- Bob: another authentication Response
@enduml

您还可以使用生命线的激活和销毁来创建更详细的图表: 这里输入图片描述

@startuml
participant User

User -> A: DoWork
activate A

A -> B: << createRequest >>
activate B

B -> C: DoWork
activate C
C --> B: WorkDone
destroy C

B --> A: RequestCreated
deactivate B

A -> User: Done
deactivate A

@enduml

1
你的图片链接已经损坏。 - Zero3

30

我通常用来将纯文本转化为序列图的最佳软件是SDEdit。它是一款Java工具,因此您可以在任何操作系统中使用它。而且它是免费软件!

使用这个工具,你只需要编写以下内容:

#![SD ticket order]
ext:External[pe]
user:Actor
/order:Order[x]
db:TicketDB
acc:Account

ext:user.order a ticket!
user:order.new()
order:return=db.reserve(date,count)
db:return=acc.debit(cost)
acc:return=db.bonus(date,count)

要获得这个:

SDEdit example


3
第一次使用时,我由于错误差点放弃。当你从浏览器中复制和粘贴示例时,它会给你一个虚假的错误,因为在声明和链接之间丢失了至关重要的空行。不要被这个问题吓到,一旦你解决了它,你会发现这是一个很好的工具。 - Sridhar Sarnobat

20

对于序列图,您可以看一下websequencediagrams - 它创建出外观漂亮的图表,并具有许多功能 (示例页面)。它不是一个命令行实用程序,但它具有其 Web-API。

ditaa 可以从 ASCII 源创建出外观漂亮的图表。它是用 Java 编写的,可以在命令行上调用,将 ASCII 文本转换成图表。


1
非常酷的工具。现在有一堆插件可用于websequencediagrams... - DNA
1
如果你想要一个与websequencediagrams.com语法类似的开源工具,你可以看一下PlantUML(http://plantuml.sourceforge.net/sequence.html)。 - user569825
Websequencediagrams非常好用,直到图表变得太大而无法阅读。除非你付费,否则你将无法选择导出除PNG以外的任何格式,但PNG文件模糊不清,无法阅读文本内容。 - Sridhar Sarnobat

12
另一个序列图工具是http://sequencediagram.org,其可以绘制图表以生成脚本,同时也可以通过脚本获取图表。因此,它非常适用于大型图表,因为你通常会在脚本中迷失方向。

enter image description here


1
有史以来最好的在线工具! - Ali Ben Messaoud

7
更新: 可能Mermaid已经足够好用了,你可以在各种markdown编辑器中使用它,例如HackMD。否则,如果要打印,请参见我的原始答案。


这个答案可能不完全符合您的想法,所以让我简要地给出一个背景。

多年来,我认识到文学编程是一种非常好的编写质量软件并保持代码易于理解的方法。也许是唯一的方法... 在任何情况下,序列图作为可视化工具,可以很好地补充代码和文字。这有助于理解。

LaTeX / PGF / pgf-umlsd / noweb

因此,为了达到这个目的,LaTeX +pgf-umlsd可以创建非常漂亮的图表。它们按语义指定,像大多数其他工具一样,这意味着您说出您想要的序列,而不是它应该看起来像什么。程序会计算出正确的图片。

因此,这段LaTeX代码:

\documentclass{article}
\usepackage{tikz}
\usepackage{pgf-umlsd}

\begin{document}
\begin{sequencediagram}
  \newthread{t}{:Thread}
  \newinst[1]{i}{:Instance}
  \begin{sdblock}{Block}{description}
     \begin{call}{t}{function()}{i}{}
  \end{call}
  \end{sdblock}
\end{sequencediagram}
\end{document}

以下代码可创建这张图片(当然使用文档中的字体等):

example from the manual

LaTeX源代码中的可执行代码部分紧接在图表下方,便于管理。我使用noweb (网站, 文档) 获取可运行代码或文章源代码。

希望能对您有所帮助。


请提供一个最小工作示例(MWE)以及编译命令。我发现手册没有指示导言,而且“pdflatex”似乎不想编译它。 - puk
刚刚找到了一个 MWE。我忘记添加 \documentclass{article}\usepackage{pgf-umlsd} 前言,以及周围的 \begin{document}...\end{document} 命令。https://tex.stackexchange.com/questions/185640/how-to-create-an-instance-in-pgf-umlsd - puk
尝试过mermaid,但不喜欢它。我觉得它的语法非常严格,甚至不支持带空格或-的参与者名称。 相反,@user3226306推荐的PlantUML具有类似的语法,但更好! - Yun Wu

2

1

1

对于序列图,您可能还想查看UMLGraph

更新于2018-08-24:网页似乎已经移动到这里


1

如果您需要序列图,您可能还想看看Visual Paradigm,这是一个非常强大的工具。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接