Answers:
我目前有一个类似的问题(为我的论文绘制多个路径图),因此我正在研究此处列出的许多选项以绘制相似的图。许多列出的用于绘制此类矢量图形的资源(例如在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进行此类项目还有很多其他好处
目前,我还没有考虑过一些直接从指定模型中绘制统计包R中的图的库,但是将来我可能会更广泛地考虑它们。qgraph库中有一些不错的示例,用于证明可以在R中完成的概念的证明。
劳拉·迪茨(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软件包即可生成非常可接受的图形。
您无法击败http://daft-pgm.org/
Daft是一个Python程序包,它使用matplotlib渲染像素完美的概率图形模型,以在期刊或互联网上发布。使用简短的Python脚本和直观的模型构建语法,您可以设计有向(贝叶斯网络,有向无环图)和无向(马尔可夫随机字段)模型,并将它们保存为matplotlib支持的任何格式(包括PDF,PNG,EPS和SVG) )。
Inkscape本质上是Adobe Illustrator的免费版本,并且是用于制作矢量图形(如您发布的图片)的非常强大的程序。它也可以与大多数统计软件包一起很好地进行最终编辑/注释/等操作。到图形-R,SAS等可以将图形输出为PDF或其他矢量格式(例如.eps),然后可以将其引入Inkscape中以处理颜色,符号,轴标签等。
我发现Diagrammix是一个非常灵活的软件包,可用于Mac OSX。它是一个全面的矢量图形软件包,并且在图形模型方面做得很好。它相当便宜,并且具有一些不错的附加组件,有助于改善边缘的形状和方向。
Diagrammix
像回答一些一样,展示如何重现问题中的图形模型。
您也可以使用Lucidchart网络应用程序。
我过去曾用它来绘制图形,它是免费的。