
有限状態マシンのようなプロットにループを追加する方法については既に多くの質問がありますが、 に関して具体的な回答が見つかりませんbayesnet
。 のノードに自己ループを追加する方法を教えてもらえますかbayesnet
?
このようなもの: Tikz で自己ループを描画し、グラフのエッジにラベルを付けるにはどうすればよいですか?
編集: サンプル コードを追加しました。 1 つの問題は、ループとプレートの下部のテキストの両方がプレート内に収まらないことです。
\begin{figure}
\centering
\tikz{
\node[latent] (b_t) {$b_t$} ;
\node[latent, right=of b_t] (t_t)
{$t_t$} ;
\node[obs, right=of t_t] (o_t) {$o_t$} ;
% \edge {b_t} {b_t} ;
\edge {b_t} {t_t} ;
\edge {t_t} {o_t} ;
\path (b_t) edge [loop above] (b_t);
\plate[inner sep=0.225cm, yshift=.25cm] {plate1} {(b_t) (t_t) (o_t) (b_t')} {T}; %
}
\end{figure}
答え1
ループは通常通り動作します。ランダムな例ループを追加しました。
\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{arrows.meta,bending}
\usetikzlibrary{bayesnet}
\begin{document}
\begin{tikzpicture}[>={Stealth[bend]}]
% nodes
\node[obs] (x) {$x$};%
\node[latent,above=of x,xshift=-1cm,path picture={\fill[gray!25] (path picture bounding box.south) rectangle (path picture bounding box.north west);}]
(y) {$y$}; %
\node[latent,above=of x,xshift=1cm] (z) {$z$}; %
\path (z) edge [loop above] node (z') {$Z$} (z);
% plate
\plate[inner sep=.25cm,yshift=.2cm,transform shape=false]{plate1}{(x)(y)(z)(z')}{$N$}; %
% edges
\edge {y,z} {x}
\end{tikzpicture}
\end{document}
付録: 更新からのコードに関しては、フィットのための補助座標を追加します。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{bayesnet}
\begin{document}
\begin{figure}
\centering
\begin{tikzpicture}
\node[latent] (b_t) {$b_t$} ;
\node[latent, right=of b_t] (t_t)
{$t_t$} ;
\node[obs, right=of t_t] (o_t) {$o_t$} ;
% \edge {b_t} {b_t} ;
\edge {b_t} {t_t} ;
\edge {t_t} {o_t} ;
\path (b_t) edge [loop above] coordinate[midway](aux) (b_t);
\plate[inner sep=0.225cm] {plate1}
{(b_t) (t_t) (o_t) (aux)} {T}; %
\end{tikzpicture}
\caption{Adding an auxiliary coordinate.}
\end{figure}
\begin{figure}
\centering
\begin{tikzpicture}
\begin{scope}[local bounding box=pft]
\node[latent] (b_t) {$b_t$} ;
\node[latent, right=of b_t] (t_t)
{$t_t$} ;
\node[obs, right=of t_t] (o_t) {$o_t$} ;
% \edge {b_t} {b_t} ;
\edge {b_t} {t_t} ;
\edge {t_t} {o_t} ;
\path (b_t) edge [loop above] (b_t);
\end{scope}
\plate[inner sep=0.225cm] {plate1} {(pft)} {T}; %
\end{tikzpicture}
\caption{Using a \texttt{local bounding box} node. (Note that this will probably improve
at a given point when the \texttt{bbox} library gets improved. Currently
development is frozen.)}
\end{figure}
\end{document}