👉目录
1 Draw.io
2 Excalidraw
3 Graphviz
4 Matplotlib
5 PlantUML
6 写在最后
在程序员的日常工作中,有两大难题:一曰写文档,二曰画图。此前我们策划了多篇技术文档写作指南文章和架构画图技巧文章,有效地帮助到了广大开发者朋友。
点击文章标题即可跳转阅读:
今天我们为大家精心分享了 5 款鹅厂程序员亲测好用的画图工具,重点是这 5 款工具全部开源免费,如果觉得对你有帮助,希望能在文末得到你的一键三连~
01
Draw.io
Draw.io(现更名为 diagrams.net)是一款功能强大、易于使用的、开源免费的在线流程图绘制工具,它支持用户创建各种类型的图表、流程图、网络图、组织结构图、UML 图等。
Draw.io 不仅支持在线版,还可以在 Windows 、 macOS 和 Linux 等多个平台安装桌面客户端版本,提供跨平台支持能力的同时,也尊重了你不想安装软件的权利。
除了跨平台支持的特点,Draw.io 还提供了:
丰富的图形库:内置大量预设图形和模板,满足各种绘图需求。
实时多人协作:支持团队成员实时在线协作,提高工作效率。
自定义形状和模板:用户可以创建并保存个性化的设计。
多格式导出:支持导出 PDF 、 SVG 、 PNG 、 JPEG 以及 HTML 等多种格式。
插件扩展性:通过插件系统,用户可以根据自己的需求扩展软件功能。
以下是一些 Draw.io 模板示例:
网页版地址:https://app.diagrams.net/
GitHub 客户端地址:https://github.com/jgraph/drawio-desktop/releases
02
Excalidraw
Excalidraw 同样是一款开源免费的画图软件,它的特点在于提供了一种手绘风格的图片输出形态,绘图体验简单、直观却又功能丰富,非常适合用于创建图表、线框图、思维导图和流程图等等程序员日常工作中会遇到的画图场景。
Excalidraw 可以直接通过浏览器访问,也可以通过 Docker 部署到私有服务器上。此外,Excalidraw 还支持与其他应用程序集成,并可通过插件系统扩展功能,包括支持脚本自定义等高级功能。同时还支持端对端加密的在线协作,只需要将一个链接发送给协议方,就能实现画图在线协作。
如果基本的图形无法满足诉求的话,Excalidraw 还提供了在线模板库,供设计师把他们的图形,图标分享给其他用户。例如系统架构图,组件图,UML 图,手绘人物图等等,应有尽有,不一而足。
以下是鹅厂工程师的一些画图示例:
官网地址:https://excalidraw.com/
模板库地址:https://libraries.excalidraw.com/?theme=light&sort=default
03
Graphviz
Graphviz 是一款由 AT&T Labs Research 发起的开源工具包,它使用 DOT 语言来描述图形结构,并通过自动布局算法生成可视化图形。
与微软出品的「Visio」的最大不同之处在于,前者是手动的,需要绘图者指定点线之间的布局,而 Graphviz 支持自动布局,只需告知 Graphviz 点与线的关系,它就能实现「自动布局」。
主要特点如下:
简单易用:Graphviz 使用简单的文本描述语言来定义图形结构,无需复杂的绘图技巧。
丰富的图形类型:支持有向图、无向图、流程图、组织结构图、类图、网络拓扑图等多种图形类型。
灵活的布局算法:提供多种布局算法,可以根据图形的特点和需求进行选择,自动处理节点的位置、边的布局以及图形的整体结构。
跨平台支持:可以在 Windows、Mac 和 Linux 等多个操作系统上运行。
丰富的输出格式:支持将图形导出为 PNG、SVG、PDF 等多种格式,方便嵌入到文档、网页或演示文稿中。
可扩展性:提供了丰富的 API 和插件机制,允许开发者根据自己的需求进行定制和扩展。
以下是 Graphviz 的一些官方示例库::
官网地址:https://www.graphviz.org/
04
Matplotlib
Matplotlib 是一个在 Python 中广泛使用的数据可视化库,它提供了丰富的绘图功能,支持创建静态、动态和交互式的图表,适用于数据分析、科学研究和工程可视化等领域。
其主要特点如下:
简单易用:Matplotlib 的 API 设计简单直观,易于上手,用户可以快速创建各种类型的图形
多样性:支持多种图形类型,包括线图、散点图、柱状图、饼图、箱线图等,满足用户对不同数据类型的可视化需求
自定义性:用户可以对图形的各种元素(如线条、颜色、标签等)进行个性化定制,以满足个性化的需求
支持多种输出格式:可以将图形输出为多种格式,包括图片文件(如 PNG、JPEG)、PDF 文件、SVG 文件等
与 NumPy 和 Pandas 集成:与 NumPy 和 Pandas 等常用数据处理库集成紧密,可以直接使用这些库中的数据结构来绘制图形
开源免费:用户可以免费使用并根据需要对其源代码进行修改和定制
以下展示一个代码输出示例:
import matplotlib.pyplot as plt
import numpy as np
# Fixing random state for reproducibility
np.random.seed(19680801)
dt = 0.01
t = np.arange(0, 30, dt)
nse1 = np.random.randn(len(t)) # white noise 1
nse2 = np.random.randn(len(t)) # white noise 2
# Two signals with a coherent part at 10 Hz and a random part
s1 = np.sin(2 * np.pi * 10 * t) + nse1
s2 = np.sin(2 * np.pi * 10 * t) + nse2
fig, axs = plt.subplots(2, 1, layout='constrained')
axs[0].plot(t, s1, t, s2)
axs[0].set_xlim(0, 2)
axs[0].set_xlabel('Time (s)')
axs[0].set_ylabel('s1 and s2')
axs[0].grid(True)
cxy, f = axs[1].cohere(s1, s2, 256, 1. / dt)
axs[1].set_ylabel('Coherence')
plt.show()
官网地址:https://matplotlib.org/
05
PlantUML
PlantUML 是一个开源项目,支持快速绘制 UML 图和各种非 UML 图,基本满足程序员的日常工作。它通过简单和直观的语言来定义图形,像 markdown 一样,让人聚焦内容,而非样式,简简单单就可以生成美观的图。
PlantUML 依赖的底层组件就有前文提到的 Graphviz,所以语法也类似,通过自定义的标记语言,来描述不同图形之间的关系,「自动布局」并绘制。
PlantUML 提供了 VS Code 插件下载,非常方便程序员的日常使用。
VS Code 市场地址:
https://marketplace.visualstudio.com/items?itemName=jebbs.plantuml
06
写在最后
在软件开发的大道上,再好的工具都是「术」的范畴,它的确可以有效地帮助大家提升工作效率,但帮助大家走得更长远的,还是那些硬核的底层原理,那才是「道」之所在。
你或许听过那些大牛用记事本写软件模型的故事,也看到过仅仅用个 PPT 就能把架构图画清楚,甚至不用画图工具几句话就把复杂概念解释清楚的案例。这些才是我们应该去追求的更高境界,诸君一起共勉!