Forgot password?
 Register account
View 20985|Reply 8

请问有没有什么能画关系图的简单工具?

[Copy link]

411

Threads

1619

Posts

110K

Credits

Credits
11813

Show all posts

abababa Posted 2019-7-14 20:05 |Read mode
Last edited by hbghlyj 2025-5-18 12:25举个例子:我想画出数的关系,先是正整数,然后给出0和负整数,三者合在一起构成整数,然后整数加上分数,构成有理数,再加上无理数,构成实数……
有点像
这个图。
但有的又比较复杂,有时需要从不同级的元素里连出线来。
然后还有就是每个元素旁边,能不能再加一些注释类的说明,比如说无理数这个元素,想给它加上“如$\sqrt{2},\pi,e$等”。

有没有什么简单的工具来做这个,就是不需要自己调整线的画法,只要写出关系来就能生成具体的图。

3153

Threads

7906

Posts

610K

Credits

Credits
64096
QQ

Show all posts

hbghlyj Posted 2025-5-18 12:27
Graphviz 是一个开源的图形可视化工具,使用简单的描述语言(DOT 语言)来定义图的结构,自动生成布局。它非常适合用来画层次结构图、关系图等。

以下是一个简单的例子,展示如何用 Graphviz 来画出你提到的数系关系图,并为每个元素添加注释说明:
  1. digraph NumberSystem {
  2.     rankdir=LR; // 从左到右布局
  3.     node [shape=ellipse];
  4.     // 定义节点
  5.     PositiveIntegers [label="正整数"];
  6.     Zero [label="0"];
  7.     NegativeIntegers [label="负整数"];
  8.     Integers [label="整数"];
  9.     Fractions [label="分数"];
  10.     RationalNumbers [label="有理数"];
  11.     IrrationalNumbers [label="无理数\n如 √2, π, e 等"];
  12.     RealNumbers [label="实数"];
  13.     // 定义关系
  14.     PositiveIntegers -> Integers;
  15.     Zero -> Integers;
  16.     NegativeIntegers -> Integers;
  17.     Integers -> RationalNumbers;
  18.     Fractions -> RationalNumbers;
  19.     RationalNumbers -> RealNumbers;
  20.     IrrationalNumbers -> RealNumbers;
  21. }
Copy the Code
将上述代码保存为一个 .dot 文件(例如 number_system.dot)。
在终端运行以下命令生成图(假设输出为 PNG 格式):
  1. dot -Tpng number_system.dot -o number_system.png
Copy the Code
Graphviz 会根据节点和边的关系自动调整布局。只需定义关系,不需要手动调整线条。可以在节点标签中直接添加注释说明。
如果你需要更复杂的功能(例如交互式图形),可以考虑使用基于 Graphviz 的工具(如 Mermaid)或其他图形库(如 Python 的 matplotlib 和 networkx)。

682

Threads

110K

Posts

910K

Credits

Credits
90973
QQ

Show all posts

kuing Posted 2025-5-18 16:28
tikz 也可以,但得用 lualatex 编译:
  1. \documentclass[border=1cm]{standalone}
  2. \usepackage{ctex}
  3. \usepackage{tikz}
  4. \usetikzlibrary{graphs,graphdrawing}
  5. \usegdlibrary{trees}
  6. \begin{document}
  7. \tikz \graph[binary tree layout, grow'=right, level distance=2cm, nodes=draw] {
  8. 复数 -- {
  9.     实数 -- {
  10.         有理数 -- {
  11.             整数 -- { 自然数, 负整数 },
  12.             分数 -- { 真分数, 假分数 }
  13.         },
  14.         无理数 -- { 正无理数, 负无理数 }
  15.     },
  16.     虚数 -- { 纯虚数, 非纯虚数 }
  17. }
  18. };
  19. \end{document}
Copy the Code
效果:
PixPin_2025-05-18_16-28-35.png

Comment

临时看 pgf 手册学着写的,更多玩法见手册。  Posted 2025-5-18 16:36
感觉 lualatex 的编译速度慢一些  Posted 2025-5-18 16:37

4

Threads

139

Posts

2198

Credits

Credits
2198

Show all posts

Aluminiumor Posted 2025-5-18 17:30
用 AxGlyph 画的,但没法像楼主说的那样一键生成
数系.svg
Wir müssen wissen, wir werden wissen.

411

Threads

1619

Posts

110K

Credits

Credits
11813

Show all posts

 Author| abababa Posted 2025-5-19 08:59
kuing 发表于 2025-5-18 16:28
tikz 也可以,但得用 lualatex 编译:

效果:
这个不错,没有跨层的指向也很好。要是跨层了可能就不行了,比如现在就想从”有理数“跨到”自然数“那里,在这个连接边上写”等势“。

3153

Threads

7906

Posts

610K

Credits

Credits
64096
QQ

Show all posts

hbghlyj Posted 2025-5-19 19:47
abababa wrote at 2025-5-19 01:59
这个不错,没有跨层的指向也很好。要是跨层了可能就不行了,比如现在就想从”有理数“跨到”自然数“那里 ...
可以通过在\graph定义之外额外添加一条带标签的边来实现
  1. \documentclass[border=1cm]{standalone}
  2. \usepackage{ctex}
  3. \usepackage{tikz}
  4. \usetikzlibrary{graphs,graphdrawing}
  5. \usegdlibrary{trees}
  6. \begin{document}
  7. \begin{tikzpicture}
  8. \graph[binary tree layout, grow'=right, level distance=2cm, nodes=draw] {
  9. 复数 -- {
  10.     实数 -- {
  11.         有理数 -- {
  12.             整数 -- { 自然数, 负整数 },
  13.             分数 -- { 真分数, 假分数 }
  14.         },
  15.         无理数 -- { 正无理数, 负无理数 },
  16.     },
  17.     虚数 -- { 纯虚数, 非纯虚数 }
  18. }
  19. };
  20. \draw(有理数) to[bend left=45]node[above] {等势} (自然数);
  21. \end{tikzpicture}
  22. \end{document}
Copy the Code

Comment

原来如此。  Posted 2025-5-20 20:21

Mobile version|Discuz Math Forum

2025-6-5 01:53 GMT+8

Powered by Discuz!

× Quick Reply To Top Edit