贝叶斯网络绘图软件(图形模型)


50

我正在寻找[免费]软件,该软件可以生成美观的图形模型,例如

在此处输入图片说明

任何建议,将不胜感激。


1
您的意思是绘制这样链接的图片或从其他软件绘制就绪的模型?如果是后者,从哪来?

绘画图片喜欢我链接的照片
C. Reed

2
它是在Inkscape中手动创建的,因此您可以尝试执行相同的操作。

10
太棒了-您提供的图片是我在2008年为Wikipedia绘制的,当我在2012年弄清楚如何重绘时发现了这个问题。您提供了PNG,但最初是SVG。那时,我使用了Inkscape,这太糟糕了-我不得不手工编辑SVG以添加希腊字母,因为那时它无法处理(也许仍然不能)。我不建议任何人使用。我将尝试一下tikz方法。
Bkkbrad

当我说我不建议任何人使用时,我的意思是我不建议任何试图绘制多个一致的板图的人使用Inkscape。
Bkkbrad

Answers:


34

我目前有一个类似的问题(为我的论文绘制多个路径图),因此我正在研究此处列出的许多选项以绘制相似的图。许多列出的用于绘制此类矢量图形的资源(例如在Microsoft Office或google绘图中)都可以用非常少的精力生成非常好的路径图。但是,我对这样的程序不满意的部分原因是,我需要生成许多图,每个图之间只有相当小的更改(例如,添加另一个节点,更改标签)。指向和点击矢量图形工具不太适合于此,并且进行此类细微更改需要付出更多的精力。同样,在许多图纸之间维护模板也变得困难。因此,我决定研究以编程方式生成此类图形的选项。

正如thias所提到的,Graphviz确实接近了我想要的所有图形特征(以及用于生成它们的非常简单的代码),但是在两个方面都不足以满足我的需求。1)缺少数学字体(例如,我不确定是否可以在Graphviz 中用符号标记节点,2)很难绘制曲线(请参阅@Stask网站上使用Graphviz 绘制路径图的文章) 。由于这些限制,我目前(非常高兴地)决定使用Latex中的Tikz / pgf图形库。下面是我尝试复制图形的一个示例(最大的麻烦是盒子右下角的标签!);β

在此处输入图片说明

\documentclass[11pt]{report}
\usepackage{tikz}
\usetikzlibrary{fit,positioning}
\begin{document}
\begin{figure}
\centering
\begin{tikzpicture}
\tikzstyle{main}=[circle, minimum size = 10mm, thick, draw =black!80, node distance = 16mm]
\tikzstyle{connect}=[-latex, thick]
\tikzstyle{box}=[rectangle, draw=black!100]
  \node[main, fill = white!100] (alpha) [label=below:$\alpha$] { };
  \node[main] (theta) [right=of alpha,label=below:$\theta$] { };
  \node[main] (z) [right=of theta,label=below:z] {};
  \node[main] (beta) [above=of z,label=below:$\beta$] { };
  \node[main, fill = black!10] (w) [right=of z,label=below:w] { };
  \path (alpha) edge [connect] (theta)
        (theta) edge [connect] (z)
		(z) edge [connect] (w)
		(beta) edge [connect] (w);
  \node[rectangle, inner sep=0mm, fit= (z) (w),label=below right:N, xshift=13mm] {};
  \node[rectangle, inner sep=4.4mm,draw=black!100, fit= (z) (w)] {};
  \node[rectangle, inner sep=4.6mm, fit= (z) (w),label=below right:M, xshift=12.5mm] {};
  \node[rectangle, inner sep=9mm, draw=black!100, fit = (theta) (z) (w)] {};
\end{tikzpicture}
\end{figure}
\end{document}
%note - compiled with pdflatex

现在,我已经写了我的乳胶论文,所以,如果你只是想而不必编译整个乳胶文件是稍微inconveniant形象,但也有一些相当小的解决方法更直接生成图像(见这个问题了在stackoverflow上)。尽管使用Tikz进行此类项目还有很多其他好处

  • 广泛的文档。该PGF手册通过制定一些类似的图表握着你的手。一旦你弄湿你的脚...
  • 那里有大量的示例库,以演示如何产生各种图形。
  • 最后,Tex堆栈交换站点是询问有关Tikz的任何问题的好地方。他们在那儿制作了一些漂亮的图形(查看他们的博客中的示例)。

目前,我还没有考虑过一些直接从指定模型中绘制统计包R中的图的库,但是将来我可能会更广泛地考虑它们。qgraph库中有一些不错的示例,用于证明可以在R中完成的概念的证明。


1
对于那些对为SEM绘制路径图感兴趣的人(或对Microsoft Office产品中可以实现的功能有更多想法的人),我建议您检查一下Jeremy Mile的 ppt路径图文件(在参考网页的底部)。
Andy W

1
很好的回应,这是一个学习曲线,但是像TeX一样,我认为从长远来看会有所收获。谢谢!
C. Reed

30

劳拉·迪茨(Laura Dietz)为tikz 编写了一个非常不错的,该可以在乳胶中绘制贝叶斯网络,而无需直接使用tikz。

要演示此软件包,请参见以下示例以解决此问题:

\documentclass[11pt]{report}
\usepackage{tikz}
\usetikzlibrary{bayesnet}
\begin{document}
\begin{figure}
  \centering
  \tikz{ %
    \node[latent] (alpha) {$\alpha$} ; %
    \node[latent, right=of alpha] (theta) {$\theta$} ; %
    \node[latent, right=of theta] (z) {z} ; %
    \node[latent, above=of z] (beta) {$\beta$} ; %
    \node[obs, right=of z] (w) {w} ; %
    \plate[inner sep=0.25cm, xshift=-0.12cm, yshift=0.12cm] {plate1} {(z) (w)} {N}; %
    \plate[inner sep=0.25cm, xshift=-0.12cm, yshift=0.12cm] {plate2} {(theta) (plate1)} {M}; %
    \edge {alpha} {theta} ; %
    \edge {theta} {z} ; %
    \edge {z,beta} {w} ; %
  }
\end{figure}
\end{document}
%note - compiled with pdflatex

在此处输入图片说明

尽管不完全相同,但它肯定传达了相同的信息,可以进行调整以更好地满足特定要求。该软件包无需学习完整的tikz软件包即可生成非常可接受的图形。


1
这个图书馆很棒!大大简化了贝叶斯网络图的创建!感谢分享。
fccoelho

我试用了该软件和aft-pgm,该软件比另一软件更易于使用。感谢作者提供的出色软件。
善意

12

您无法击败http://daft-pgm.org/

Daft是一个Python程序包,它使用matplotlib渲染像素完美的概率图形模型,以在期刊或互联网上发布。使用简短的Python脚本和直观的模型构建语法,您可以设计有向(贝叶斯网络,有向无环图)和无向(马尔可夫随机字段)模型,并将它们保存为matplotlib支持的任何格式(包括PDF,PNG,EPS和SVG) )。


愚蠢的太棒了!这应该是大家接受的答案,恕我直言
dominik andreas

Daft有一些缺点:它不会自动缩放节点以适合文本,不计算网络布局等。这足以使我失望。
fccoelho

7

您可以尝试GraphViz

这使您可以在文本文件中指定图形,然后将自动绘制图形(避免重叠的箭头等)。请转到此处(pdf),获取最少的示例和手册。


5

Inkscape本质上是Adobe Illustrator的免费版本,并且是用于制作矢量图形(如您发布的图片)的非常强大的程序。它也可以与大多数统计软件包一起很好地进行最终编辑/注释/等操作。到图形-R,SAS等可以将图形输出为PDF或其他矢量格式(例如.eps),然后可以将其引入Inkscape中以处理颜色,符号,轴标签等。


我更喜欢将箭头视为特殊对象的工具:在移动变量时,希望箭头会跟随。看来Inkscape无法做到这一点。
ziyuang 2014年

4

如果您对使用LaTeX有特别的兴趣,则LaTeXDraw程序具有一些不错的功能,可以使用嵌入式乳胶代码创建流程图。

它导入/导出PSTricks代码和SVG,还可以导出svg,pdf,eps,jpg,png等。它在Linux,Mac OS X和Windows中运行。


3

Dia是用于绘制图表的免费开源程序。我发现它很有用,开始并不难。


1

我发现Diagrammix是一个非常灵活的软件包,可用于Mac OSX。它是一个全面的矢量图形软件包,并且在图形模型方面做得很好。它相当便宜,并且具有一些不错的附加组件,有助于改善边缘的形状和方向。


一条建议:您可以Diagrammix像回答一些一样,展示如何重现问题中的图形模型。
Firebug




-1

SCAVIS具有贝叶斯网络。尝试谷歌“斯卡维斯贝叶斯网络”。同一程序可以使用Python(或Java)语法绘制不同的图。


-1

您可以使用draw.io并使用一个或多个模板来创建这些图标。它可以帮助您创建SVG或任何其他格式。并且不需要您在系统上安装任何东西。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.