0

我已经尝试了几个来绘制一个图形,以直线 S0 -> S1 -> S2 表示连续状态。然后在下面的另一条直线上行动。S0 -> A0 -> S1 -> A1 -> S2 之间有边。形成彼此相邻排列的三角形。
水平线上的状态和动作所需的输出

我尝试使用集群,并且 rank=same 对于我想要对齐的节点。我还尝试在 Stack Overflow 上使用 [constraint=false] 和其他答案。

\begin{dot2tex}[fdp]
digraph G {
    newrank=true;
    node[group="states"]
    S0 [texlbl="$S_{t-2}$", shape=none];
    S1 [texlbl="$S_{t-1}$", shape=none];
    S2 [texlbl="$S_t$", shape=none];
    S3 [texlbl="$S_{t+1}$", shape=none];
    node[group=""]
    A0 [texlbl="$A_{t-2}$", shape=none];
    A1 [texlbl="$A_{t-1}$", shape=none];
    A2 [texlbl="$A_t$", shape=none];
    { rank=same; S0; S1; S2; S3;
    S0 -> S1-> S2 -> S3;
    S0 -> A0;
    S1 -> A1;
    S2 -> A2; }
    A0 -> S1;
    A1 -> S2;
    A2 -> S3;
}
\end{dot2tex}

然而,图表的输出是曲线上状态和动作的混合。 输出显示曲线图

4

2 回答 2

1

看来您正在使用 fdp 布局引擎。

根据文件

fdp 使用“弹簧”模型绘制无向图。它依赖于 Fruchterman 和 Reingold 精神的力量导向方法

在您的情况下,您需要使用布局引擎。

我不熟悉您正在使用的程序,但疯狂的猜测是替换\begin{dot2tex}[fdp]\begin{dot2tex}[dot]

于 2019-03-23T05:23:44.173 回答
1

您的代码看起来像是 LaTeX 文档的一部分,但它对我不起作用;dot2tex据我所知,是一个生成 LaTeX 代码的 Python 脚本。但我在这里超出了我的深度,它似乎对你有用。

我所做的 - 我已经纠正了您所犯的错误,将指令的右括号}放回rank = same同一行,并将其从明显的 LaTeX 环境中取出;我还更改了显示“向上”的边缘的箭头方向。然后我注释掉了不必要的指令,到达

digraph G {
#    newrank=true;
#    node[group="states"]
    S0 [texlbl="$S_{t-2}$", shape=none];
    S1 [texlbl="$S_{t-1}$", shape=none];
    S2 [texlbl="$S_t$", shape=none];
    S3 [texlbl="$S_{t+1}$", shape=none];
#    node[group=""]
    A0 [texlbl="$A_{t-2}$", shape=none];
    A1 [texlbl="$A_{t-1}$", shape=none];
    A2 [texlbl="$A_t$", shape=none];
    { rank=same; S0; S1; S2; S3; }
    S0 -> S1-> S2 -> S3;
    S0 -> A0;
    S1 -> A1;
    S2 -> A2;
    edge[ dir = back ];
    S1 -> A0;
    S2 -> A1;
    S3 -> A2;
}

将其转换为 LaTex 文档

dot2tex -ftikz x > x.tex

我明白了

在此处输入图像描述

我猜这就是您想要的,或者至少是您的代码将产生的。您的工作流程可能有所不同,但如果您纠正了主要错误并将右大括号移到了它所属的位置,那么您应该完成了。请注意,默认情况下dot2tex使用dot引擎,这是您应该做的,正如@Dany 正确指出的那样。

如果您想要与帖子中图片接近的东西,请尝试

digraph G 
{
    node[ shape =none ]

    S  [ label = "" ];
    S0 [ texlbl="$S_{t-2}$" ];
    S1 [ texlbl="$S_{t-1}$" ];
    S2 [ texlbl="$S_t$" ];
    S3 [ texlbl="$S_{t+1}$" ];

    A0 [ texlbl="$A_{t-2}$" ];
    A1 [ texlbl="$A_{t-1}$" ];
    A2 [ texlbl="$A_t$" ];

    { rank=same; S S0 S1 S2 S3 }
    S0 -> S1 -> S2 -> S3

    S0 -> A1;
    S1 -> A2;
    edge[ dir = back ];
    S0 -> A0;
    S1 -> A1;
    S2 -> A2;

    edge[ style = invis ];
    S -> S1
    S -> A0;
}

在此处输入图像描述

于 2019-03-23T10:06:33.947 回答